Pagini recente » Cod sursa (job #945878) | Cod sursa (job #2863722) | Cod sursa (job #817476) | Cod sursa (job #2274647) | Cod sursa (job #2479847)
#include <cstdio>
#include <algorithm>
#define MOD 9973
using namespace std;
long long t, a[1000005];
long long n;
bool ciur[1000005];
long long putere(long long n, long p)
{
long long rez=1;
while(p)
{
if(p&1)
{
p--;
rez=(n*rez)%MOD;
}
n=(n*n)%MOD;
p>>=1;
}
return rez;
}
pair <long long, long long> eExt(long long x, long long y)
{
if(y == 0)
return {1, 0};
auto p=eExt(y, x%y);
return {p.second, p.first-(x/y)*p.second};
}
long long invMod(long long x)
{
long long k=eExt(x, MOD).first;
while(k<0)
k+=MOD;
return k;
}
void ciurul()
{
for(int i=2; i<=1000005; i++)
{
if(ciur[i] == 0)
{
for(int j=i+i; j<=1000005; j+=i)
ciur[i]=1;
a[++a[0]]=i;
}
}
}
void descFactPrimi(long long x)
{
long long nr=1, fin=1, sus=1, jos=1, d=0;
for(int i=1; i <= a[0] && a[i]*a[i] <= x; i++)
{
d=0;
long long p=a[i];
while(x%p == 0)
{
x/=p;
d++;
}
if(d != 0)
{
nr=(nr*(1+d))%MOD;
sus=(sus*(putere(p, d+1)-1))%MOD;
jos=(jos*(p-1))%MOD;
}
}
fin=(fin*(sus*invMod(jos))%MOD)%MOD;
if(x != 1)
{
nr=(nr*2)%MOD;
sus=(putere(x, 2)-1)%MOD;
jos=(x-1)%MOD;
fin=(fin*(sus*invMod(jos))%MOD)%MOD;
}
printf("%lld %lld\n", nr, fin);
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
scanf("%lld", &t);
ciurul();
for(int i=1; i<=t; i++)
{
scanf("%lld", &n);
descFactPrimi(n);
}
return 0;
}