我如何进行"数百万次计算?"

fud*_*din 5 c turbo-c

我的代码粘贴在下面.当我运行这个程序时,它继续计算.我正在使用旧的Turbo C++编译器.这样的程序需要多长时间才能执行?我等了大约5分钟,但没有任何输出.

/*The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.
*/
#include<stdio.h>
#include<conio.h>
#define TWO_MILLION 2*1000*1000
int IsPrime(long unsigned int num);
int main()
{
    long unsigned int i,sum=0;
    clrscr();
    for(i=2;i<TWO_MILLION;i++)
    {
        if(IsPrime(i))
        sum+=i;
    }
    gotoxy(25,25);
    printf("%ld",sum);
    getch();
    return 0;
}
int IsPrime(long unsigned int num)
{
    int flag=1;
    long unsigned int i;
    for(i=2;i<num;i++)
    {
        if(num%i==0)
        {
            flag=0;
            break;
        }
    }
    return flag;
}
Run Code Online (Sandbox Code Playgroud)

Win*_*ert 21

你没有进行数百万计算,你正在做数万亿计算.

IsPrime将在O(n)时间运行,即它将执行200万条指令以确定该单个数字.做两百万次这样的事情将花费太长时间.

要做到这一点,你真的想使用类似的东西:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes,它可以更有效地确定特定范围内的所有素数.

  • 是的,是的,Sieve很酷,但总的来说这个素数问题已被问了一百万次,并且有一些非常快速的答案.特别是Sieve是有限的,因为你可以轻松地查看前2M数字,但如果你想要前2M素数 - 那么它会变得有点棘手.我建议看一个快速的python prime生成器.扫描整个主题并准备学习新内容.http://stackoverflow.com/questions/567222/simple-prime-generator-in-python (3认同)
  • 实际上,200万平方只有4万亿,而不是接近千万亿. (2认同)