プログラム、第2のプログラム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;
}
。 あなたは自動配列を作成し、動的にこのコード内の1つの割り当てられた場合には、基本的に合計が5^10 + 12^10に
どのプログラムが正しいのか分かり、不正なものをデバッグしてください。 – Carcigenicate
Proのヒント:コードを正しくフォーマットすると、デバッグが容易になります。 –
プログラム1の出力は望ましい出力です。 –