Pagini recente » Cod sursa (job #73261) | Borderou de evaluare (job #1363266) | Cod sursa (job #744720) | Borderou de evaluare (job #507854) | Cod sursa (job #2579005)
#include <cstdio>
#include <bitset>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX = 1000005;
const int MOD = 9973;
long long n;
int t, k, p[MAX];
bitset <MAX> viz;
void ciur()
{
for ( int i = 2; i<MAX ; ++i)
{
if ( viz[i]==0)
{
p[++k]=i;
for(int j= i+i; j<MAX; j+=i)
viz[j]=1;
}
}
}
inline int pow (int x, int p)
{
int rez = 1;
x%=MOD;
for(; p; p>>=1)
{
if (p&1)
{
rez*=x;
rez%=MOD;
}
x*=x;
x%=MOD;
}
return rez;
}
void solve ()
{
scanf("%lld", &n);
int nd=1, sd=1;
for (int i= 1; i<=k && 1LL * p[i]*p[i] <= n; ++i)
{
if(n%p[i]) continue;
int P =0;
while (n%p[i]==0)
{
n/=p[i];
++P;
}
nd *= (P+1);
int P1 = (pow(p[i], P+1) - 1)%MOD;
int P2 = pow(p[i]-1, MOD - 2)%MOD;
sd=(((sd*P1)%MOD)*P2)%MOD;
}
if(n>1)
{
nd*=2;
sd = ((1LL * sd * (n+1))%MOD);
}
printf ("%d, %d\n", nd, sd);
}
int main ()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
ciur();
for (scanf("%d", &t); t; --t)
solve();
return 0;
}