Pagini recente » Cod sursa (job #1004678) | Cod sursa (job #960088) | Cod sursa (job #2081844) | Cod sursa (job #2009918) | Cod sursa (job #406475)
Cod sursa(job #406475)
#include<stdio.h>
#include<string.h>
#define Ld 1000000
#define MOD 9973
#define divizori 80000
using namespace std;
int t,T,i,n,prim[divizori],ciur[Ld+1],P,d[divizori],D,exp[divizori],put[divizori],Nr,S;
void precalc()
{
int i,j;
for(i=2;i<=Ld;i++)
if(!ciur[i])
{
prim[++P]=i;
for(j=i+i;j<=Ld;j+=i)
ciur[j]=1;
}
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&T);
precalc();
for(t=1;t<=T;t++)
{
scanf("%d",&n);
D=0;
memset(exp,0,sizeof(exp));
memset(put,0,sizeof(put));
for(i=1; i<=P && prim[i]<=n && n!=1; i++)
if(n%prim[i]==0)
{
d[++D]=prim[i];
put[D]=prim[i];
while(n%prim[i]==0)
{
exp[D]++;
put[D]=(put[D]*prim[i])%MOD;
n/=prim[i];
}
}
if(n!=1) { d[++D]=n; exp[D]=1; put[D]=(n*n)%MOD;}
Nr=1;
for(i=1;i<=D;i++)
Nr*=(exp[i]+1);
S=1;
for(i=1;i<=D;i++)
S= ( S* (put[i]-1)/(d[i]-1) ) %MOD;
printf("%d %d\n",Nr,S);
}
return 0;
}