Pagini recente » Cod sursa (job #2258616) | Cod sursa (job #951397) | Cod sursa (job #159292) | Cod sursa (job #3250913) | Cod sursa (job #429399)
Cod sursa(job #429399)
#include<stdio.h>
#include<string.h>
#define Ld 1000000
#define MOD 9973
#define divizori 80000
using namespace std;
int T,i,n,prim[divizori],ciur[Ld+10],P,e,Nrdiv,d;
long long Sum;
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;
}
}
long long lgput(int a,int b)
{
long long 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("%d",&n);
Nrdiv=1; Sum=1;
for(d=1; 1ll*prim[d]*prim[d]<=n; 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 ) % MOD );
Sum%=MOD;
Sum*= ( lgput(prim[d]-1,MOD-2) %MOD );
Sum%=MOD;
}
}
if(n>1)
{
Nrdiv<<=1;
Sum*= ( ( 1ll*n*n-1 ) %MOD );
Sum%=MOD;
Sum*= ( lgput(n-1,MOD-2) %MOD );
Sum%=MOD;
}
printf("%d %d\n",Nrdiv,Sum);
}
return 0;
}