C中的欧拉10号项目

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)

我无法运行下面的代码

目标是找出所有素数之和小于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;
    }
#包括
#包括
整数是素数(长整数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++)