programme 1.Pourquoi les valeurs de somme dans les deux programmes sont-elles différentes à la fin?
#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;
}
Dans le deuxième programme quand je suis en train d'imprimer des valeurs avant l'impression somme il est en train de changer la valeur de somme dans le programme. Quelqu'un peut-il me dire pourquoi cela se passe-t-il? programme 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;
}
On dirait qu'il manque deux valeurs que je vais résumer. essentiellement somme est le total de tous les nombres premiers entre 10^12 à 10^12 + 10^5
Déterminez quel programme est correct, puis déboguez le programme incorrect. – Carcigenicate
Astuce Pro: le formatage de votre code correctement, il sera plus facile de déboguer. –
La sortie du programme 1 est la sortie désirée. –