我的代码粘贴在下面.当我运行这个程序时,它继续计算.我正在使用旧的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,它可以更有效地确定特定范围内的所有素数.