Я довольно новичок в C++, и я хочу узнать, как оптимизировать скорость моих программ. В настоящее время я работаю над программой, которая вычисляет идеальные числа от 1 до 1.000.000. Идеальное число - это то, где сумма его собственных делителей равна самому числу. Например. 28 - идеальное число, потому что 1 + 2 + 4 + 7 + 14 = 28. Ниже приведен мой кодКакие операции занимают много времени и как их избежать?
#include <iostream>
using namespace std;
int main() {
int a = 1000000;
for(int i = 1; i <= a; ++i)
{
int sum = 0;
int q;
// The biggest proper divisor is half the number itself
if(i % 2 == 0) q = i/2;
else q = (i+1)/2;
for(int j = 1; j <= q; ++j)
{
if(i % j == 0) sum += j;
}
//Condition for perfect number
if(sum == i) cout << i << " is a perfect number!" << endl;
}
system("pause");
return 0;
}
Какие операции в этом коде требуется много времени? Как я могу улучшить скорость программы? В общем, как узнать, какие операции занимают много времени и как их избежать?
Профилировали ли вы код? – Mgetz
Микрооптимизация: вы можете использовать 'q = (i + 1)/2;' без 'if'. – Jarod42
У вас нет «операции», которая занимает много времени. Вы запрограммировали какой-то алгоритм, который, возможно, не самый быстрый для вашей проблемы. Использование профайлера не очень полезно, я считаю, потому что он покажет вам, как долго и часто вызывается строка кода. Но нет блока кода, который можно оптимизировать вручную. Для меня это выглядит как вопрос для лучшего алгоритма, а не для конкретной медленной кодонки. – Klaus