C项目的Euler数字为10

时间:2014-04-07 10:38:52

标签: 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)
            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;
    }

2 个答案:

答案 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周期内运行。