对于项目euler问题10,我们应该添加所有素数,但这需要我的计算机多年才能完成。需要更高效的算法! 继承了我目前的C代码:
#include <stdio.h>
int main(void)
{
int i, j, flag, sum=0;
for(i=3; i< 2000000; i = i + 2)
{
flag=0;
for(j=3; j<=i/2; j = j + 2)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0)
sum += i;
}
printf ("%i", sum + 2);
}
答案 0 :(得分:0)
这是对你的程序的一个小改进,同时保持相同的算法来测试素数:
sum
变量设置为前两个素数之和(即2 + 3 = 5)请注意,此实现改进了算法的性能,但不提高算法的时间复杂度,并且有更有效的方法来测试素数。< / p>
int i, j, iplus, jplus, flag, iroot, sum = 2+3;
int iroot = (int)ceil(sqrt((float)5));
int square = iroot*iroot;
for (i=5, iplus=2; i<2000000; i+=iplus, iplus=4-iplus)
{
flag = 0;
if (square < i)
{
iroot++;
square = iroot*iroot;
// instead of calculating the square root of the number every time,
// calculate it at the beginning, and increment it only when needed
}
for (j=5, jplus=2; j<=iroot; j+=jplus, jplus=4-jplus)
{
if (i%j == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
sum += i;
}
printf("%i", sum);