Pagini recente » Cod sursa (job #1157045) | Cod sursa (job #1610678) | Cod sursa (job #1512137) | Cod sursa (job #1382472) | Cod sursa (job #1067573)
/*
Keep It Simple!
*/
#include<stdio.h>
#include<iostream>
#define MOD 9973
int N,X,Erastothene[80000],cnt,nrd,p[80000],d[80000];
bool viz[1000000];
void InitEra()
{
Erastothene[++cnt] = 2;
for(int i=3; i<=1000000; i++)
{
if(!viz[i])
{
Erastothene[++cnt] = i;
for(int j=i; j<=1000000; j+=i)
viz[j] = 1;
}
}
}
void InitDivs()
{
int i=1;
nrd = 0;
while( X != 1)
{
if ( X % Erastothene[i] == 0 )
{
p[++nrd] = Erastothene[i];
d[nrd] = 0;
while( X % Erastothene[i] == 0 ) { X/= Erastothene[i]; d[nrd]++; }
}
i++;
}
}
long long DivsNumber()
{
long long nr = 1;
for(int i=1; i<=nrd; i++)
nr*=(d[i]+1);
return nr;
}
int put(int a,int b)
{
int r = 1;
while(b)
{
if ( b%2 )
{
r*=a%MOD;
b--;
}
a*=a%MOD;
b/=2;
}
return r;
}
long long SumDivs()
{
int ns=1 ,nj=1;
for(int i=1; i<=nrd; i++)
{
ns *= ( put(p[i],d[i]+1) - 1 );
ns = ns%MOD;
nj *= (p[i]-1 % MOD);
}
return (ns/nj)%MOD;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&N);
InitEra();
for(int i=1; i<=N; i++)
{
scanf("%d",&X);
InitDivs();
printf("%lld ",DivsNumber());
printf("%lld\n",SumDivs());
}
}