Pagini recente » Cod sursa (job #691981) | Cod sursa (job #1060073) | Cod sursa (job #2433489) | Cod sursa (job #116224) | Cod sursa (job #2479831)
#include <cstdio>
#define MOD 9973
#include <algorithm>
using namespace std;
int t, a[100000];
long long n;
bool ciur[1000005];
pair<long long, long long> euclid(int x, int y)
{
if(y==0)
return {1, 0};
auto p=euclid(y, x%y);
return {p.second, p.first-(x/y)*p.second};
}
long long invmod(long long x)
{
long long x1=euclid(x, MOD).first;
while(x1<0)
x1+=MOD;
return x1;
}
long long ridicare(long long n, long long p)
{
long long rez=1;
while(p>0)
{
if(p%2==1)
{
p--;
rez=(rez*n)%MOD;
}
p/=2;
n=(n*n)%MOD;
}
return rez%MOD;
}
void ciurul()
{
for(int i=2;i<=1000005;i++)
{
if(ciur[i]==0)
{
a[++a[0]]=i;
for(int j=i+i;j<=1000005;j+=i)
ciur[j]=1;
}
}
}
int prim(long long x)
{
if(x>1000005)
return 1;
return ciur[x];
}
void descFactoriPrimi(long long x)
{
long long nr=1, sus=1, jos=1, tot=1;
int d=0;
for(int i=1; a[i]*a[i]<=x; i++)
{
d=0;
int p=a[i];
while(x%p==0)
{
x/=p;
d++;
}
nr=((nr*(1+d))%MOD)%MOD;
sus=(ridicare(p, d+1)-1)%MOD;
jos=(p-1)%MOD;
tot=(tot*(sus*invmod(jos))%MOD)%MOD;
}
if(x!=1)
{
nr=((nr*2)%MOD)%MOD;
sus=(ridicare(x, 2)-1)%MOD;
jos=(x-1)%MOD;
tot=(tot*(sus*invmod(jos))%MOD)%MOD;
}
printf("%lld %lld\n", nr, tot);
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
scanf("%d", &t);
ciurul();
for(int i=0;i<t;i++)
{
scanf("%lld", &n);
descFactoriPrimi(n);
}
return 0;
}