Pagini recente » Cod sursa (job #3197113) | Cod sursa (job #2542620) | Cod sursa (job #535596) | Cod sursa (job #3277242) | Cod sursa (job #1703728)
#include<cstdio>
#define M 9973
#define MAX_N 1001000
long long inv[9999];//9973
char ciur[MAX_N];
int v[MAX_N],q=0;
/*void calc_ciur()
{
for(int d=2;d<=MAX_N;d++)
{
if(ciur[d]==0)
{
v[++q]=d;
for(int i=d+d;i<=MAX_N;i+=d)
{
ciur[i]=1;
}
}
}
}*/
long long putere(long long a,long long n)//a^n
{
long long p;
p=1;
while(n!=0)
{
if(n%2!=0)
p=p*a%M;
a=a*a%M;
n/=2;
}
return p%M;
}
int main()
{
long long n,t,i,p,nrdiv,sdiv,put,s,j/*,d*/;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%lld",&t);
for(i=1;i<M;i++)
{
inv[i]=putere(i,M-2);
//printf("%d ",inv[i]);
}
//printf("\n");
//calc_ciur();
for(int d=2;d<=MAX_N;d++)
{
if(ciur[d]==0)
{
v[++q]=d;
for(int i=d+d;i<=MAX_N;i+=d)
{
ciur[i]=1;
}
}
}
for(i=1;i<=t;i++)
{
scanf("%lld",&n);
//d=2;
nrdiv=sdiv=1;
s=n;
j=1;
while(v[j]*v[j]<=n && j<=n)
{
p=0;
put=1;
while(n%v[j]==0)
{
n/=v[j];
p++;
put=put*v[j]%M;
}
put*=v[j];
put%=M;
put--;
if(put==-1)
put+=M;
if(p!=0)
{
nrdiv=nrdiv*(p+1);
//sdiv=sdiv*((put-1)/(d-1))%9973;
sdiv=sdiv*put%M*inv[(v[j]-1+M)%M]%M;
s=s/v[j]*(v[j]-1);
}
//d++;
j++;
}
if(n!=1)
{
nrdiv=nrdiv*2;
sdiv=sdiv*(n+1)%M;
s=s/n*(n-1);
}
printf("%lld %lld\n",nrdiv,sdiv%M);
}
return 0;
}