Cod sursa(job #1355302)

Utilizator VictoriaNevTascau Victoria VictoriaNev Data 22 februarie 2015 16:19:54
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX=1000005;
const int MOD=9973;
long long n, tests, k, i, j, c[NMAX], f1, f2, nrdiv, sumdiv;
bool viz[NMAX];
inline int pow(int x,int p)
{
    int n=1;
    n%=MOD;
    while(p)
    {
        n*=x;
        n%=MOD;
        p--;
    }
    return n;

}
int main()
{
    ifstream cin("ssnd.in");
    ofstream cout("ssnd.out");
    cin>>tests;
    while(tests--)
    {
        cin>>n;
        for(i=2; i<=NMAX; i++)
            if(viz[i]==0)
            {
                c[++k]=i;
                for(j=i+i; j<=NMAX; j+=i)
                    viz[j]=1;
            }

        nrdiv=1;
        sumdiv=1;
        for(i=1; i<=k&&c[i]*c[i]<=n; i++)
        {
            if(n%c[i])continue;
            int p=0;
            while(n%c[i]==0)
            {
                n/=c[i];
                p++;
            }
            nrdiv*=(p+1);
            f1=(pow(c[i],p+1)-1)%MOD;
            f2=c[i]-1;
            sumdiv=(((sumdiv*f1)%MOD)/f2)%MOD;
        }
        if(n>1)
        {
            nrdiv*=2;
            sumdiv=sumdiv*(n+1)%MOD;
        }

        cout<<nrdiv<<' '<<sumdiv<<'\n';
    }
    return 0;
}