Pagini recente » Cod sursa (job #2142960) | Cod sursa (job #1958560) | Cod sursa (job #2725921) | Cod sursa (job #2267717) | Cod sursa (job #2270739)
#include <bits/stdc++.h>
using namespace std;
int t, np;
const int MOD = 9973;
struct fp{
int x, k;
};
fp p[1005];
bool f[1000005];
int pr[100005];
inline void ciur(){
pr[++np] = 2;
for(int i = 3; i <= 1000000 ; i += 2){
if(!f[i]){
pr[++np] = i;
for(int j = i * 3; j <= 1000000 ; j += i * 2)
f[j] = 1;
}
}
}
inline void desc(long long x, int &NR){
for(int i = 1; 1LL * pr[i] * pr[i] <= x && i <= np ; ++i){
if(x % pr[i] == 0){
p[++NR] = {pr[i], 0};
while(x % pr[i] == 0){
++p[NR].k;
x /= pr[i];
}
}
}
if(x > 1) p[++NR] = {x, 1};
}
inline int lgput(int x, int p){
int ans = 1, aux = x;
for(int i = 1; i <= p ; i *= 2){
if(i & p) ans = (1LL * ans * aux) % MOD;
aux = (1LL * aux * aux) % MOD;
}
return ans;
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
scanf("%d", &t);
long long n;
ciur();
while(t--){
scanf("%lld", &n);
int NR = 0;
desc(n, NR);
int nrdiv = 1, sumdiv = 1;
for(int i = 1; i <= NR ; ++i){
nrdiv = nrdiv * (p[i].k + 1);
sumdiv = (1LL * sumdiv * ((lgput(p[i].x, p[i].k + 1) - 1) * lgput(p[i].x - 1, MOD - 2)) % MOD) % MOD;
if(sumdiv < 0) sumdiv = sumdiv % MOD + MOD;
}
printf("%d %d\n", nrdiv, sumdiv);
}
return 0;
}