Pagini recente » Cod sursa (job #2727658) | Cod sursa (job #802210) | Cod sursa (job #1319752) | Cod sursa (job #58371) | Cod sursa (job #791224)
Cod sursa(job #791224)
#include<fstream>
using namespace std;
long long nr1,r,aux,nr,s,imn,i10,p,t10,i,j,maxi,a[1000005],d[1003],pr[1000005];
long long ridic(long long x,long long m,int tip)
{
long long p2,j1;
if(tip==1)
{
p2=1;
for(j1=0;(1<<j1)<=m;j1++)
{
if((m&(1<<j1))>0) p2=(p2*x)%r;
x=(x*x)%r;
}
return p2;
}
else
{
p2=1;
for(j1=0;(1<<j1)<=m;j1++)
{
if((m&(1<<j1))>0) p2=(p2*x)%r;
x=(x*x)%r;
}
return p2;
}
}
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
//freopen("ssnd.in","r",stdin);
//freopen("ssnd.out","w",stdout);
//scanf("%lld",&t10);
f>>t10;
for(i=1;i<=t10;i++)
{
//scanf("%lld",&d[i]);
f>>d[i];
if(d[i]>maxi) maxi=d[i];
}
a[1]=1;
for(i=1;i*i<=maxi;i++)
;
maxi=i;
for(i=2;i<=maxi;i++)
if(a[i]==0)
{
nr1++;
pr[nr1]=i;
for(j=i*i;j<=maxi;j=j+i)
a[j]=1;
}
r=9973;
for(i10=1;i10<=t10;i10++)
{
p=1;
s=1;
aux=d[i10];
for(j=1;j<=nr1&&1LL*pr[j]*pr[j]<=aux;j++)
if(aux%pr[j]==0)
{
nr=0;
while(aux%pr[j]==0)
{
aux=aux/pr[j];
nr++;
}
p=p*(nr+1);
if(pr[j]==9973) s=(s*((ridic(pr[j],nr+1,0)-1)/(pr[j]-1))%9973)%9973;
else s=(s*((ridic(pr[j],nr+1,1)-1)*ridic(pr[j]-1,9971,1))%9973)%9973;
}
if(aux>1)
{
j=nr1+1;
pr[j]=aux;
nr=1;
p=p*(nr+1);
if(pr[j]==9973) s=(s*((ridic(pr[j],nr+1,0)-1)/(pr[j]-1))%9973)%9973;
else s=(s*((ridic(pr[j],nr+1,1)-1)*ridic(pr[j]-1,9971,1))%9973)%9973;
}
//printf("%lld %lld\n",p,s);
g<<p<<" "<<s<<'\n';
}
return 0;
}