Pagini recente » Cod sursa (job #563871) | Cod sursa (job #78821) | Cod sursa (job #1867994) | Cod sursa (job #2456025) | Cod sursa (job #2039138)
#include <iostream>
#include <cstdio>
#define MOD 9973
using namespace std;
long long n,x;
long long s,nd,lp;
pair <long long, long long> r;
int putere(int p)
{
int r=0;
while(n%p==0)
{
n/=p;
r++;
}
return r;
}
pair <long long, long long> euclid(long long la, long long lb)
{
if(lb==0)
return {1,0};
auto p=euclid(lb,la%lb);
return {p.second,p.first-p.second*(la/lb)};
}
int invers(int ln)
{
r=euclid(ln,MOD);
while(r.first<0)
r.first+=MOD;
return r.first;
}
int ridicare(int b, int p)
{
int r=1;
while(p)
{
if(p%2==0)
{
b=(b*b)%MOD;
p/=2;
}
else
{
r=(r*b)%MOD;
p--;
b=(b*b)%MOD;
p/=2;
}
}
return r;
}
void solve()
{
if(n%2==0)
{
lp=putere(2);
nd=(nd*(lp+1))%MOD;
s=((s*(ridicare(2,lp+1)-1)))%MOD;
}
if(n%3==0)
{
lp=putere(3);
nd=(nd*(lp+1))%MOD;
s=((s*(ridicare(3,lp+1)-1))*(invers(2)))%MOD;
}
for(int i=5;i*i<=n;i+=6)
{
if(n%i==0)
{
lp=putere(i);
nd=(nd*(lp+1))%MOD;
s=((s*(ridicare(i,lp+1)-1))*(invers(i-1)))%MOD;
}
if(n%(i+2)==0)
{
lp=putere(i+2);
nd=(nd*(lp+1))%MOD;
s=((s*(ridicare(i+2,lp+1)-1))*(invers(i+1)))%MOD;
}
}
if(n!=1)
{
nd=(nd*2)%MOD;
s=((s*(n*n-1))*(invers(n-1)))%MOD;
}
cout<<nd<<" "<<s<<"\n";
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d", &x);
for(int i=0;i<x;i++)
{
scanf("\n%d", &n);
s=nd=1;
solve();
}
return 0;
}