Divisor Summation solution getting TLE

I wanted to solve this problem and getting TLE.

Here is my code,

#include <iostream>
#include <cassert>
#include <vector>
#include <numeric>
using namespace std;

int main(){
    int test_case;
    vector<int> divisors;

    scanf("%d", &test_case);
    assert(test_case <= 200000);

    while(test_case--) {
        int number;
        scanf("%d", &number);
        assert(number >= 1);
        assert(number <= 500000);

        int half_number = number / 2;
        for(int i = 1; i <= half_number; i++) {
            if(number%i == 0 && i != number) {

        printf("%d\n", accumulate(divisors.begin(), divisors.end(), 0));

    return 0;

1 Like

Can you fix the link? Otherwise it is hard to check whether the problem is part of an active contest or not.
Links in markdown have the form
The url is probably missing. At the bottom of your post you should see a pencil button, clicking that you can edit your question.

Now I fixed it… @spaanse

You can predict that your algorithm would get TLE:

Your algorithm is \mathcal O(tn) where t is the number of testcases and n is the value of the given integer. Filling in the maximum values of both of these we get that your algorithm would need roughly 500\;000\cdot200\;000=100\;000\;000\;000=10^{11} operations. A handy guideline is that a computer can perform 10^9 operations per second, so your program would take 100s in the worst case, giving TLE.

This means you need a better algorithm to pass the time limit.
To give you a hint:


If 3 divides 33, what does that say about 11?