Cod sursa(job #2954179)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 13 decembrie 2022 14:48:11
Problema Suma si numarul divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
using namespace std;
ifstream F("ssnd.in");
ofstream G("ssnd.out");
int i,j,k,p[99999],t,o=9973;
long long n,m,q[9999],s[9999],u,v,w[9999],z,l,x,y,a,b,d,e,f,g,h,c;
bool r[1000001];
int main()
{
    for(p[k++]=2,i=3;i*i<=1e6;++i)
        if(!r[i])
            for(p[k++]=i,r[i]=1,j=i*i;j<=1e6;r[j]=1,j+=2*i);
    for(F>>t;t--;G<<u<<' '<<z<<'\n') {
        for(F>>n,m=n,l=i=0;i<k&&m&&p[i]*p[i]<=m;++i)
            if(m%p[i]==0)
                for(q[++l]=p[i],s[l]=0;m%p[i]==0;m/=p[i],++s[l]);
        if(m>1)
            q[++l]=m,s[l]=1;
        for(u=i=1;i<=l;u*=(s[i++]+1));
        for(i=1;i<=l;++i)
            for(w[i]=j=1;j<s[i]+2;w[i]=(w[i]*q[i])%o,++j);
        for(z=i=1;i<=l;z=(z*(w[i]+o-1))%o,++i);
        for(i=1;i<=l;z=(z*x)%o,++i) {
            for(a=q[i]-1,b=c=o,x=1,y=0;b;d=a,e=b,a=e,b=d%e,f=d/e,g=x,h=y,x=h,y=g-f*h);
            for(;x<0;x+=c);
        }
    }
    return 0;
}