Pagini recente » Cod sursa (job #3285244) | Cod sursa (job #2273642) | Cod sursa (job #272831) | Cod sursa (job #2130215) | Cod sursa (job #1582446)
#include <iostream>
#include <fstream>
#define ll long long
#define pmax 1000000
#define mod 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool ok[1000005];
int k,p[80005],dv[80005],pw[80005],nrd,ind;
void GenPrimes()
{ int i,j;
for(i=3;i*i<=pmax;i+=2)
if (!ok[i])
{
for(j=i*i;j<=pmax;j+=2*i)
ok[j]=1;
}
k=1; p[k]=2;
for(i=3;i<=pmax;i+=2)
if (!ok[i]) {k++; p[k]=i;}
}
void Desc(ll x)
{ int i,put=0;
nrd=0; ind=1;
while(p[ind]*p[ind]<=x && ind<=k)
{ put=0;
while(x%p[ind]==0)
{ put++;
x/=p[ind];
}
if (put) {nrd++; pw[nrd]=put; dv[nrd]=p[ind];}
ind++;
}
if (x>1) {nrd++; pw[nrd]=1; dv[nrd]=x;}
}
int LgPut(int a,int b)
{ int i,add=a,res=1;
for(i=0;i<=30;i++)
{if (b&(1<<i)) res=res*add%mod;
add=add*add%mod;
}
return res;
}
int Inv(int a,int b)
{ int i,c,r[30],nr=0,x,y,x2,y2,aux=b;
while(b)
{ c=a%b; nr++; r[nr]=a/b;
a=b; b=c;
}
x=1; y=0;
for(i=nr;i>=1;i--)
{ x2=y; y2=x-y*r[i];
x=x2; y=y2;
}
while(x<0) x+=aux;
return x;
}
void Solve(ll x)
{ int i,ans1=1,ans2=1;
for(i=1;i<=nrd;i++)
ans1=1LL*ans1*(pw[i]+1)%mod;
for(i=1;i<=nrd;i++)
ans2=1LL*ans2*(LgPut(dv[i]%mod,pw[i]+1)-1)*Inv((dv[i]-1)%mod,mod)%mod;
g<<ans1<<" "<<ans2<<"\n";
}
int main()
{ int i,t; ll x;
f>>t;
GenPrimes();
for(i=1;i<=t;i++)
{ f>>x;
Desc(x);
Solve(x);
}
return 0;
}