Pagini recente » Cod sursa (job #712008) | Cod sursa (job #882) | Cod sursa (job #2885943) | Cod sursa (job #1676750) | Cod sursa (job #432371)
Cod sursa(job #432371)
#include<stdio.h>
#define Nmax 1000005
#define mod 9973
#define plm long long
int A;
int e[Nmax],p[Nmax],k;
plm pr[Nmax],sum;
int nr[Nmax],cur,sol;
void ciur()
{
for(plm i=2;i<Nmax;++i)
if (!e[i])
{
for(plm j=i*i;j<Nmax;j+=i)
e[j]=1;
p[++k]=i;
}
}
int pw(int A,int B)
{
int rez,pwe=A;
for(rez=1; B ; B/=2)
{
if (B%2==1)
rez = (rez * pwe)%mod;
pwe = (pwe * pwe)%mod;
}
return rez;
}
int gcd(int A,int B,int &X,int &Y)
{
if (B==0)
{
X=1;
Y=0;
return A;
}
int X0,Y0,D;
D = gcd(B,A%B,X0,Y0);
X = Y0;
Y = X0 - (A/B)*Y0;
return D;
}
void solve()
{
int b=A,M=0,D,X,Y;
for(int i=1; b>1 && p[i]*p[i]<=b;++i)
if (b%p[i]==0)
{
pr[++M]=p[i];
nr[M]=0;
for(;b%p[i]==0; b/=p[i] , ++nr[M]);
}
if (b>1)
{
pr[++M]=b;
nr[M]=1;
}
sol=1;
for(int i=1;i<=M;++i)
sol *= (nr[i]+1);
printf("%d ",sol);
sum=1;X=0;Y=0;
for(int i=1;i<=M;++i)
{
cur = pw(pr[i],nr[i]+1) - 1;
D = gcd(pr[i]-1,mod,X,Y);
while(X<0) X+=mod;
sum = (sum*cur*X)% mod;
}
printf("%lld\n",sum);
}
int main()
{
int T;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&T);
ciur();
for(;T;--T)
{
scanf("%d",&A);
solve();
}
return 0;
}