Pagini recente » Cod sursa (job #788356) | Cod sursa (job #2333395) | Cod sursa (job #2975606) | Cod sursa (job #1195653) | Cod sursa (job #1956756)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int MOD = 9973;
int primes[80003];
bool viz[1000103];
int MAX = 1e6+100;
int AM;
inline long long lgput(long long a, int p) {
if(p == 0)
return 1;
if(p == 1)
return a%MOD;
if(p%2 == 0) {
long long t = lgput(a, p/2);
return (t*t)%MOD;
} else {
return (lgput(a, p-1)*(a%MOD))%MOD;
}
}
void solve(long long n) {
int todo = sqrt(n);
int am = 0;
long long sum = 1;
long long prod = 1;
long long i = 0;
//cout << todo << " " << primes[2] << " " << MAX << '\n';
for(int I = 1; 1LL*primes[I]*primes[I] <= n; I++) {
i = primes[I];
//cout << i << '\n';
if(n%i == 0) {
am = 0;
while(n%i == 0) {
n /= i;
am++;
}
sum *= (am+1);
long long T = (lgput(i, am+1)-1+MOD)%MOD;
long long invmod = lgput(i-1, MOD-2);
T = (T*invmod)%MOD;
prod = (prod*T)%MOD;
}
}
if(n != 1) {
sum *= 2;
long long T = (lgput(n, 2)-1+MOD)%MOD;
long long invmod = lgput(n-1, MOD-2);
T = (T*invmod)%MOD;
prod = (prod*T)%MOD;
}
out << sum << " " << prod << '\n';
}
int main() {
int t;
in >> t;
long long n;
primes[++AM] = 2;
for(int i = 3; i <= MAX; i += 2) {
if(!viz[i]) {
viz[i] = 1;
primes[++AM] = i;
for(long long j = 1LL*i*i; j <= MAX; j += i) {
viz[j] = 1;
}
}
}
for(int i = 1; i <= t; i++) {
in >> n;
solve(n);
}
return 0;
}