Pagini recente » Cod sursa (job #2042863) | Cod sursa (job #151807) | Cod sursa (job #2248036) | Cod sursa (job #59835) | Cod sursa (job #406103)
Cod sursa(job #406103)
#include<fstream.h>
#include<math.h>
#define p 9973
char v[1000000];
int w[100000],s[100000],e[100000];
int exp(int n, int ex)
{
int i,r=1;
for(i=0;(1<<i)<=ex;i++)
{
if((1<<i)&ex)
r=(r*n)%p;
n=(n*n)%p;
}
return (r-1)%p;
}
int eu(int a, int b, int &x, int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int d,x0,y0;
d=eu(b,a%b,x0,y0);
x=y0;
y=x0-(a/b)*y0;
return d;
}
int inv(int a)
{
int x,y;
if(p>a)
eu(p,a,x,y);
else
eu(a,p,y,x);
while(y<0)y+=p;
while(y>p)y-=p;
return y;
}
int main()
{
bool gasit;
int n=1000000,nn=1000,t,a,b,d,c,i,nr,pp;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
f>>t;
w[++w[0]]=2;
d=3;
while(d<=n)
{
w[++w[0]]=d;
if(d<=nn)
{
a=d*d;
b=(d<<1);
while(a<=n)
{
c=(a>>1);
if(!v[c])
v[c]=1;
a+=b;
}
}
gasit=0;
c=(d>>1)+1;
while(!gasit)
{
if(!v[c])
{
d=(c<<1)+1;
gasit=1;
}
else c++;
}
}
while(t--)
{
f>>n;
i=1;
while(w[i]*w[i]<=n)
{
if(n%w[i]==0)
{
s[++s[0]]=w[i];
while(n%w[i]==0)
{
n/=w[i];
e[s[0]]++;
}
}
i++;
}
if(n>1)
{
s[++s[0]]=n;
e[s[0]]=1;
}
nr=1;
for(i=1;i<=s[0];i++)
nr=nr*(e[i]+1)%p;
g<<nr<<' ';
pp=1;
for(i=1;i<=s[0];i++)
pp=pp*exp(s[i],e[i]+1)%p;
for(i=1;i<=s[0];i++)
pp=pp*inv(s[i]-1)%p;
g<<pp<<'\n';
for(i=1;i<=s[0];i++)
e[i]=s[i]=0;
e[0]=s[0]=0;
}
return 0;
}