Pagini recente » Cod sursa (job #2294571) | Cod sursa (job #2140644) | Cod sursa (job #474158) | Cod sursa (job #2489378) | Cod sursa (job #492385)
Cod sursa(job #492385)
#include<stdio.h>
#define Ld 1000000
#define MOD 9973
#define divizori 80010
using namespace std;
int T,i,prim[divizori],ciur[Ld+10],P,e,d;
int Sum,Nrdiv;
long long n;
void precalc()
{
long long i,j;
for(i=2;i<=Ld;i++)
if(!ciur[i])
{
prim[++P]=i;
for(j=i*i;j<=Ld;j+=(i<<1))
ciur[j]=1;
}
}
int lgput(int a,int b)
{
int s;
for(s=1;b;b>>=1,a=(a*a)%MOD)
if(b&1) s=(s*a)%MOD;
return s;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
precalc();
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
Nrdiv=1; Sum=1;
for(d=1; prim[d]<=n && d <= 80000; d++)
{
if(n%prim[d]==0)
{
e=1;
while(n%prim[d]==0 && n>1)
{
e++;
n/=prim[d];
}
Nrdiv*=e;
Sum *= ( lgput(prim[d],e)-1 ) ;
Sum%=MOD;
Sum *= lgput(prim[d]-1,MOD-2) ;
Sum%=MOD;
}
}
if(n>1)
{
Nrdiv<<=1;
Sum *= ( n*n-1 );
Sum%=MOD;
Sum *= lgput((int)n-1,MOD-2) ;
Sum%=MOD;
}
printf("%d %d\n",Nrdiv,Sum);
}
return 0;
}