Cod sursa(job #2376840)

Utilizator silviumihailSilviu Mihail silviumihail Data 8 martie 2019 18:05:03
Problema Suma si numarul divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 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;
bool pr[1000010];
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,p*=x[i],p%=MOD;
            if(e!=0)
            {
                p*=x[i],p%=MOD;
                s*=(p-1)/(x[i]-1);
                s%=MOD;
            }
            nr*=(e+1);
        }
        if(n!=1)nr*=2,s*=(n*n-1)/(n-1),s%=MOD;
        cout<<nr<<" "<<s<<'\n';
    }
    return 0;
}