Cod sursa(job #1948205)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 31 martie 2017 20:58:36
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long int n,radical,ciur[1000001],a[1000001];
long long int i,j,contor;
long long int SUMA,d,p,putere,nd,ok,xu;
int main()
{
    radical=1000000;
    for(i=2; i<=radical; i++)
        ciur[i]=1;
    for(i=2; i*i<=radical; i++)
        if(ciur[i])
            for(j=2; j*i<=radical; j++)
                ciur[i*j]=0;
    contor=0;
    for(i=2; i<=radical; i++)
        if(ciur[i])
            a[++contor]=i;
    f>>xu;
    for(ok=1; ok<=xu; ok++)
    {
        f>>n;
        SUMA=1;
        d=a[1];
        contor=2;
        nd=1;
        while(d*d<=n&&n>=1)
        {
            p=0;
            while(n%d==0)
            {
                p++;
                n/=d;
            }
            if(p)
            {
                putere=1;
                for(j=1; j<=p+1; j++)
                    putere*=d;
                SUMA*=(putere-1)/(d-1);
                nd*=(p+1);
            }
            d=a[contor];
            contor++;
        }
        if(n!=1)
        {
            nd*=2;
            SUMA*=(n*n-1)/(n-1);
        }
        g<<nd<<' '<<SUMA<<'\n';
    }
    f.close();
    g.close();
    return 0;
}