Я решил сделать эти Project Euler проблемы в C, потому что у меня создалось впечатление, что C работает быстро, но это, похоже, не так. Оба следующих петель являются чрезвычайно медленно:Как оптимизировать эти циклы C?
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 я предлагаю вам использовать Сито Эратосфена: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - ваш код беспорядок, как есть, и я сомневаюсь, что кто-нибудь будет оптимизировать ваш O (N^x) петли –
Вы скомпилировали источники с настройками оптимизации? –