Pagini recente » Cod sursa (job #693042) | Cod sursa (job #124392) | Cod sursa (job #2163459) | Cod sursa (job #1572033) | Cod sursa (job #433875)
Cod sursa(job #433875)
#include <cstdio>
#include <bitset>
using namespace std;
const int RNMAX = 1000010;
const int modulo = 9973;
int e[RNMAX], RAD = 0;
long long N;
int T;
void ciur()
{
bitset<RNMAX> b;
for(int i = 2 ; i * i< RNMAX ; i++)
if(!b[i])
for(int j = i * i ; j < RNMAX ; j += i)
b[j] = 1;
for(int i = 2 ; i <= RNMAX ; i++)
if(!b[i])
e[++RAD] = i;
}
int invmod(int a, int p)
{
int rez = 1;
for(; p ; p = p>>1)
{
if(p & 1)
rez = (rez * a) % modulo , p--;
a = (a * a) % modulo;
}
return rez;
}
void rezolva()
{
long long n = N;
int NR = 1, S = 1;
for(int i = 1 ; e[i] * e[i] <= N ; i++)
if(N % e[i] == 0)
{
int s = 1, d = 0;
while(n % e[i] == 0)
{
n /= e[i];
d++;
s *= e[i];
}
NR *= d + 1;
S = (S * (s * e[i] - 1)) % modulo;
S = (S * invmod(e[i] - 1, modulo - 2)) % modulo;
}
if(n > 1)
{
NR *= 2;
S = (S * (n * n - 1)) % modulo;
S = (S * invmod(n - 1, modulo - 2)) % modulo;
}
printf("%d %d\n", NR, S);
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
ciur();
scanf("%d",&T);
for(int i = 1 ; i <= T ; i++)
{
scanf("%lld",&N);
rezolva();
}
return 0;
}