Pagini recente » Cod sursa (job #3250553) | Cod sursa (job #2733654) | Cod sursa (job #31395) | Cod sursa (job #2533136) | Cod sursa (job #622620)
Cod sursa(job #622620)
#include<stdio.h>
const int Z=9973;
const int C = 1000000;
int ci[C+2],v[C];
int inv[Z+2];
long long nr,s;
int u;
inline int minus(int a,int b)
{
if(a-b>=0) return a-b;
return Z+a-b;
}
void euclid(int a,int b,int &x,int &y,int &d)
{
if(b==0)
{
x=1;
y=0;
d=a;
return;
}
int x1,y1,q=a/b;
euclid(b,a%b,x1,y1,d);
x=y1;
y=x1-q*y1;
}
void ciur()
{
int i,j;
ci[1]=true;
for(i=2;i*i<C;i++)
if(!ci[i])
for(j=i*i;j<C;j+=i)
ci[j]=true;
for(i=1;i<C;i++)
if(!ci[i])
v[++u]=i;
}
void desc(int n)
{
nr=s=1;
int i,p,ct;
for(i=1;v[i]*v[i]<=n;i++)
{
if(n%v[i]!=0)
continue;
p=v[i];
ct=1;
while(n%v[i]==0)
{
ct++;
p*=v[i];
n/=v[i];
}
nr*=ct;
s=s*minus(p,1)*inv[minus(v[i],1)]%Z;
}
if(n!=1)
{
nr*=2;
s*=(n+1);
}
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
int i,x,y,d,t,n;
for(i=1;i<Z;i++)
{
euclid(i,Z,x,y,d);
inv[i]=minus(x,0);
}
ciur();
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d",&n);
desc(n);
printf("%lld %lld\n",nr,s);
}
return 0;
}