Time Limit Exceeded in c++

Tommy03

Utente Attivo
6 Giu 2018
508
50
28
17
Bassano del Grappa (VI)
Salve a tutti, ho iniziato da poco a impararmi c++ per provare a partecipare a delle gare, e ho trovato online dei problemi per allenarmi. Questo ad esempio è uno (ma mi è successa la stessa cosa anche in altri problemi):
Dato n (n>=1 e n <=10^12), trova la somma dei divisori di n e scrivila in modulo 10^9+7
Io ho scritto questo codice e funziona:
Codice:
#include <iostream>
 
using namespace std;
long long divisori(long long param){
    long long somma_div=0;
    for(long long k=1;k<=param;k++){
        if((param % k) ==0){
            somma_div+=k;
        }
    }
    return somma_div;
}
 
int main()
{
    long long n;
    cin >> n;
    long long somma=0;
    for(long long i=1;i<=n;i++){
        somma+=divisori(i);
    }
    cout << (somma% 1000000007);
 
    return 0;
}
Pero funziona soltanto per numeri "piccoli", quando compilo mi viene sbagliato perchè in alcuni Test Case, quelli con n più alti (diciamo più o meno dal milione in poi) mi dà come errore: "Time Limit Exceeded".
Qualcuno sa dirmi se è un errore dovuto al mio codice che è scritto sbagliato o se è un errore "casuale"?
Cercando su Internet ho letto che può essere dovuto a infiniti loop (non mi sembra) o dati troppo grandi per cui impiega troppo tempo, se è così c'è qualcosa che si può fare per risolvere?
Grazie