我无法运行以下代码,即它不会发出任何输出
目标是找出所有素数的总和低于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)
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;
}
答案 0 :(得分:2)
你正在使用for循环错误。 for循环看起来像这样:
for(initialization; test expression; update)
但你写了
for(i<2000000;i++;)
应该是
for(;i<2000000;i++)
即跳过初始化,在每次迭代测试中i <2000000并递增。
答案 1 :(得分:0)
您的问题是,您实际上将每个整数分解为200万。这不是你的代码不能正常运行,而是运行速度非常慢。如果你附加一个调试器,你很可能会在行
if(i%n==0)
大部分时间。
实施Sieve of Eratostenes。这将是最有效的。
此外,您的循环for(i<2000000;i++;)
将在2^64
周期内运行。