Cod sursa(job #1626778)

Utilizator maribMarilena Bescuca marib Data 3 martie 2016 11:59:46
Problema Sum Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>

using namespace std;

long long n, nr, nr1, tot[100002], marked[100002];

int main()
{
    ifstream in("sum.in");
    ofstream out("sum.out");
    in>>n;
    for(int i = 2; i <= 100000; ++i){
        if(!marked[i]){
            for(int j = i * 2; j <= 100000; j += i){
                marked[j] = i;
            }
        }
    }
    tot[1] = 0;
    for(int i = 2; i <= 100000; ++i){
        if(!marked[i])
            tot[i] = i - 1;
        else {
            nr = i;
            while(!(nr%marked[i])){
                nr /= marked[i];
            }
            nr1 = i / nr;
            if(nr != 1){
                tot[i] = tot[nr] * tot[nr1];
            }
            else tot[i] = i * (marked[i] - 1) / marked[i];
        }
    }
    for(int i = 1; i <= n; ++i){
        in>>nr;
        out<<tot[nr] * nr * 2<<"\n";
    }
    in.close();
    out.close();
    return 0;
}