Cod sursa(job #2376895)

Utilizator silviumihailSilviu Mihail silviumihail Data 8 martie 2019 18:33:27
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;
long long t,i,n,j,x[1000010],MOD=9973,e,p,s,nr,k,cn,in,inv;
bool pr[1000010];
long long putere(long long x,long long p)
{
    long long sol=1,N=x;
    while(p)
    {
        if(p&1)sol=(sol*N)%MOD;
        N=(N*N)%MOD;
        p/=2;
    }
    return sol;
}
int main()
{
    ifstream cin ("ssnd.in");
    ofstream cout ("ssnd.out");
    cin>>t;
    for(i=2; i<=1000000; ++i)
        if(!pr[i])
        {
            x[++k]=i;
            j=i*2;
            while(j<=1000000)
            {
                pr[j]=true;
                j+=i;
            }
        }
    while(t--)
    {
        cin>>n;
        cn=n;
        nr=1;
        s=1;
        for(i=1; i<=k; ++i)
        {
            in=i;
            if(n==1||x[i]*x[i]>cn)break;
            e=0;
            p=1;
            while(n%x[i]==0)n/=x[i],++e;
            if(e!=0)
            {
                p=(putere(x[i],e+1)-1)%MOD;
                inv=putere(x[i]-1,MOD-2);
                s*=p*inv;
                s%=MOD;
            }
            nr*=(e+1);
        }
        if(n!=1)
        {
            nr*=2;
            inv=putere(n-1,MOD-2);
            p=(putere(n,2)-1);
            s*=p*inv;
            s%=MOD;
        }
        cout<<nr<<" "<<s<<'\n';
    }
    return 0;
}