Pagini recente » Cod sursa (job #1676670) | Cod sursa (job #732387) | Cod sursa (job #1524539) | Cod sursa (job #691650) | Cod sursa (job #2277110)
#include <iostream>
#include <cstdio>
#include <vector>
#define mod 9973
#define N 1000005
using namespace std;
long long ciur[N];
long long n, t, s, nr;
vector <long long> prime;
void eratostene()
{
for(long long d=2;d<=N;d++)
if(!ciur[d])
{
for(long long i=2*d;i<=N;i+=d)
ciur[i]=1;
prime.push_back(d);
}
}
void inv_modular(long long a, long long b, long long &l, long long &k)
{
if(b==0)
{
l=1;
k=0;
return;
}
long long k1, l1;
inv_modular(b, a%b, l1, k1);
l=k1;
k=l1-(a/b)*k1;
}
long long putere(long long a, long long p)
{
long long prod=1;
while(p>0)
{
if(p%2==0)
{
a=(a*a)%mod;
p=p/2;
}
else
{
prod=(prod*a)%mod;
p--;
}
}
return prod;
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
eratostene();
scanf("%lld\n", &t);
for(int test=0;test<t;test++)
{
scanf("%lld\n", &n);
s=1; nr=1;
long long p=0;
long long l=prime.size();
for(long long i=0;i<l && prime[i]*prime[i]<=n;i++)
{
long long d=prime[i];
p=0;
while(n%d==0)
{
n=n/d;
p++;
}
if(p>0)
{
nr=(nr*(p+1))%mod;
long long nc=(putere(d, p+1)%mod)-1;
if(nc<0)
nc+=mod;
long long l, k;
inv_modular(d-1, mod, l, k);
while(l<0)
l+=mod;
if(l!=0)
s=(s*(nc*l)%mod)%mod;
else
s=(s*nc)%mod;
}
}
if(n>1)
{
nr=nr*2;
long long nc=(n*n)%mod-1;
if(nc<0)
nc+=mod;
long long l, k;
inv_modular(n-1, mod, l, k);
while(l<0)
l+=mod;
if(l!=0)
s=(s*(nc*l)%mod)%mod;
else
s=(s*nc)%mod;
}
printf("%lld %lld\n", nr, s);
}
return 0;
}