#include <iostream>
using namespace std;
unsigned long long divsum(unsigned long long x);
int main()
{
unsigned long long x;
cin >> x;
unsigned long long y[200000];
for (unsigned int i = 0; i < x; i++)
cin >> y[i];
for (unsigned int i = 0; i < x; i++){
cout << divsum(y[i]) << endl;
}
return 0;
}
unsigned long long divsum(unsigned long long x){
int sum = 0;
for(unsigned int i = 1; i <= x/2; i++){
if(x % i == 0)
sum += i;
}
return sum;
}
Я делаю онлайн-упражнение, и в нем говорится, что в первой строке есть 2000000 дел, поэтому я сделал массив этой суммы, однако, когда Я отправляю решение, это превышает время. Поэтому мне было интересно, что это альтернативный и быстрый способ сделать это? Программа работает отлично сейчас, за исключением того, что она превышает срок действия веб-сайта.Сохранение неизвестного количества целых чисел без лишнего времени/памяти
Вы должны сказать, что если алгоритм DO, в чтобы дать вам лучшие способы его реализации ... – Daniel
Простой вызов 'std :: transform' должен работать нормально. Конечно, он также не может иметь побочных эффектов, поэтому он может не зависящим от того, как вы определяете 'divsum'. – chris
Если ваше решение превышает время, проблема обычно заключается в сложности алгоритма, а не в используемой памяти. Однако для уменьшения использования памяти вы можете использовать 'std :: vector y (x)'. –