C中的欧拉10号项目
我无法运行下面的代码 目标是找出所有素数之和小于200万C中的欧拉10号项目,c,C,我无法运行下面的代码 目标是找出所有素数之和小于200万 #include <stdio.h> #include <math.h> int is_prime(long long int i) { long long int n; if(i==2) return 1; for(n=2;n<=sqrt(i);n++) if(i%n==0)
#include <stdio.h>
#include <math.h>
int is_prime(long long int i)
{
long long int n;
if(i==2)
return 1;
for(n=2;n<=sqrt(i);n++)
if(i%n==0)
return 0;
return 1;
}
int main()
{
long long int s=0,i=2;
for(i<2000000;i++;)
{
if(is_prime(i))
s=s+i;
}
printf("sum: %lli",s);
return 0;
}
#包括
#包括
整数是素数(长整数i)
{
长整型n;
如果(i==2)
返回1;
对于(n=2;n而言,您的问题在于,您实际上是在对每个整数进行分解,最多可达200万个整数。这并不是因为您的代码无法工作,而是因为它运行得非常慢。如果您将调试器附加到它上,您很可能处于第二行
if(i%n==0)
大多数时候
在这里实施。将是最有效的
另外,您的for循环(i您使用的for循环错误。for循环如下所示:
for(initialization; test expression; update)
但是你写了
for(i<2000000;i++;)
for(iSo)你想调试和修复你的代码转储吗?在循环中试试这个:if(i%10000==0){putchar('#');flush(stdout);}
看看它的速度有多快(每一万个数字一次)。有什么问题吗?看看这个,看看你是否能发现任何问题:for(i)可能的副本
for(;i<2000000;i++)