Cod sursa(job #2713998)

Utilizator Amelia_MilcuMilcu Amelia Amelia_Milcu Data 1 martie 2021 07:45:31
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bool c[1000003] ;
long long n;
int t,i,j,s,nr,x,y,p[1000003],d,exp;
int lgp(int a,int b)
{
    if(b==0)
        return 1;
    if(b==1)
        return a%MOD;
    int r=lgp(a,b/2);
    r=r*r;
    if(b%2==0)
        return r%MOD;
    return ((a%MOD)*(r%MOD))%MOD;
}
int main()
{
    p[p[0]=1]=2;
    for(i=3; i<=1000000; i+=2)
        if(!c[i])
        {
            p[++p[0]]=i;
            for(j=i+i; j<=1000000; j+=i)
                c[j]=1;
        }
    fin>>t;
    for(;t--;)
    {
        fin>>n;
        nr=s=1;
        for(i=1; n!=1&&1LL*p[i]*p[i]<=n; i++)
        {
            if (n%p[i])
                continue;
            d=p[i];
            exp=1;
            while (n%d==0)
            {
                exp++;
                n/=d;
            }
            nr*=exp;
            x=lgp(d,exp)-1;
            if (x<0)
                x+=MOD;
            y=lgp(d+MOD-1,MOD-2);
            x=(x*y)%MOD;
            s=s*x%MOD;
        }
        if(n!=1)
        {
            nr*=2;
            n%=MOD;
            s=(s*(n+1))%MOD;
        }
        fout<<nr<<" "<<s<<"\n";
    }
    return 0;
}