我选择在C中执行这些Project Euler问题,因为我的印象是C很快,但似乎并非如此。下面两个环体极其缓慢:如何优化这些C for循环?
int problem_7() {
int n = 0;
for (int i = 1; i <= 10001; i++) {
for (int j = (i==1)?1:n+1; j > 0; j++) {
int factorCounter = 0;
for (int k = 1; k <= j/2; k++)
factorCounter += (j % k == 0);
if (factorCounter == 1) {
n = j;
break;
}
}
}
return n;
}
long long int problem_10() {
long long int sum = 0;
for (int i = 2; i < 2000000; i++) {
int factorCount = 0;
for (int j = 1; j <= i/2; j++) {
factorCount += (i % j == 0);
sum += i*(j == i/2 && factorCount == 1);
}
}
return sum;
}
有什么办法可以让这些循环运行得更快?他们做他们应该做的事情,但他们每人花费5分钟时间来执行。
试着用另一种语言做同样的事情,看性能是否增加或减少:-)。 –
对于Euler 7,我建议你使用Eratosthenes的筛选器:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - 你的代码是一团糟,我怀疑有人会打扰你优化你的O(N^x )循环 –
您是否使用优化设置编译了源代码? –