Pagini recente » arhiva-test | Cod sursa (job #2104662) | Cod sursa (job #2533407) | Cod sursa (job #1212600) | Cod sursa (job #3240305)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int MOD = 9973;
const int MAX = 1e6;
int64_t t, n;
bitset<MAX + 5> c;
vector<int64_t> primes;
int64_t lgput(int64_t base, int64_t exp){
int64_t res = 1;
while(exp){
if(exp & 1)
res = (res * base) % MOD;
base = (base * base) % MOD;
exp >>= 1;
}
return res;
}
void compute_sieve(){
c[0] = c[1] = true;
for(int i = 1; i <= 1000; ++i)
if(!c[i])
for(int j = i; j * i <= MAX; ++j)
c[i * j] = true;
primes.push_back(2);
for(int64_t i = 3; i <= MAX; i += 2)
if(!c[i])
primes.push_back(i);
}
void solve_query(){
int64_t n, sus = 1, jos = 1, nrdiv = 1;
fin >> n;
for(int64_t x : primes){
int64_t cnt = 0;
if(x * x > n)
break;
while(n % x == 0){
n /= x;
++cnt;
}
nrdiv = (nrdiv * (cnt + 1)) % MOD;
if(cnt){
jos = (jos * (x - 1)) % MOD;
int64_t p = lgput(x, cnt + 1);
p = (p + MOD - 1) % MOD;
sus = (sus * p) % MOD;
}
}
if(n != 1){
nrdiv = (nrdiv * 2) % MOD;
jos = (jos * (n - 1)) % MOD;
int64_t p = lgput(n, 2);
p = (p + MOD - 1) % MOD;
sus = (sus * p) % MOD;
}
jos = lgput(jos, MOD - 2);
fout << nrdiv << ' ' << (sus * jos) % MOD << '\n';
}
int main(){
compute_sieve();
fin >> t;
for(;t--;)
solve_query();
}