我在这里做错了什么?
#include<stdio.h>
int main(){
int i,count;
long long int sum = 0, num;
for(num = 1; num <= 1000; num++){
count = 0;
for(i = 2; i <= num / 2; i++){
if(num % i == 0){
count++;
break;
}
}
if(count == 0 && num != 1)
sum = sum + num;
}
printf("Sum of prime numbers is: %d ", sum);
return 0;
}
我试图制作一个程序,输出n个数以下的所有素数的总和,n为200万,但是当我尝试运行它时,会略有延迟,并且它什么也不输出...它对于像1000这样的小数已经足够好了或100,但数字很大,它什么都不输出。我也没有错误或错误。 (请帮助,我一无所知,所以请指导这个年轻的孩子)
最佳答案
上面的程序很好,但是可以进一步降低时间复杂度并使其更快。更好的方法是使用eratosthenes算法的筛子。您可以在此处阅读http://www.geeksforgeeks.org/sieve-of-eratosthenes/
您遇到的问题的程序是
#include <bits/stdc++.h>
using namespace std;
void SieveOfEratosthenes(long long int n)
{
bool prime[n+1];
memset(prime, true, sizeof(prime));
for (long long int p=2; p*p<=n; p++)
{
if (prime[p] == true)
{
for (int i=p*2; i<=n; i += p)
prime[i] = false;
}
}
long long sum=0;
for (int p=2; p<=n; p++)
if (prime[p])
sum+=p;
cout << sum << " ";
}
int main()
{
int n = 2000000;
cout << "sum of prime numbers less then 2000000 is :" << endl;
SieveOfEratosthenes(n);
return 0;
}
如果您在理解程序时遇到困难,请告诉我。注意:您也可以使用分段Seive进一步降低时间复杂度
关于c - 低于200万的素数总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43156647/