Cod sursa(job #2376907)

Utilizator silviumihailSilviu Mihail silviumihail Data 8 martie 2019 18:45:21
Problema Suma si numarul divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <bits/stdc++.h>
using namespace std;
int t,i,j,x[1000010],MOD=9973,e,p,s,nr,k,in,inv,ss;
long long n,cn;
bool pr[1000010];
int putere(int x,int p)
{
    int 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||1LL*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);
                ss=(p*inv)%MOD;
                s=(s*ss)%MOD;
                s%=MOD;
            }
            nr*=(e+1);
        }
        if(n!=1)
        {
            n%=MOD;
            nr*=2;
            inv=putere(n-1,MOD-2);
            p=(putere(n,2)-1);
            ss=(p*inv)%MOD;
            s=(s*ss)%MOD;
            s%=MOD;
        }
        cout<<nr<<" "<<s<<'\n';
    }
    return 0;
}