程序1.爲什麼兩個程序中的總和值不同?
#include<iostream>
using namespace std;
int main()
{
int a[100000];
int *b=new int[1000000];
//for(int i=0;i<100000;i++)
//a[i]=0;
long long int sum=0;
const long long int x=1000000000000ll;
for(long long int i=2;i<1000000;i++)
{
if(b[i]==1)
continue;
for(long long int j=i*i;j<1000000;j+=i)
b[j]=1;
long long int k=((x-1)/i+1)*i-x;
//Sieve upto 10^12+10^5
for(;k<100000;k+=i)
a[k]=1;
}
for(int i=0;i<100000;i++)
{
if(a[i]!=1)
{
cout<<i+x<<" "<<i%1000<<endl;
sum=sum+i+x;
}
}
cout<<"sum="<<sum;
}
在第二方案,當我打印總和則改變總和的程序中的值之前打印的一些值。有人可以告訴我爲什麼會發生這種情況? 方案2
#include<iostream>
using namespace std;
int main()
{
int a[100000];
int *b=new int[1000000];
//for(int i=0;i<100000;i++)
//a[i]=0;
long long int sum=0;
const long long int x=1000000000000ll;
for(long long int i=2;i<1000000;i++)
{
if(b[i]==1)
continue;
for(long long int j=i*i;j<1000000;j+=i)
b[j]=1;
long long int k=((x-1)/i+1)*i-x;
//Sieve upto 10^12+10^5
for(;k<100000;k+=i)
a[k]=1;
}
for(int i=0;i<100000;i++)
{
if(a[i]!=1)
{
sum=sum+i+x;
}
}
cout<<"sum="<<sum;
}
它看起來就像是缺少兩個值,我要進行總結。 基本上總和之間的總的所有素數的10^12至10^12 + 10^5
找出哪個程序是正確的,然後調試不正確的程序。 – Carcigenicate
專業提示:正確地格式化您的代碼會使調試更容易。 –
程序1的輸出是期望的輸出。 –