Pagini recente » Cod sursa (job #1334735) | Cod sursa (job #2251572) | Cod sursa (job #2793261) | Cod sursa (job #1997258) | Cod sursa (job #1366983)
#include <iostream>
#include <vector>
#include <string.h>
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int maxn = 1000005;
const int mod = 9973;
bitset <maxn> used;
vector <int> primes;
int n;
inline void ciur() {
primes.push_back(2);
for(int i = 3 ; i < maxn ; i += 2) {
if(used[i])
continue;
primes.push_back(i);
/// cerr << i << '\n';
for(int j = i + i ; j < maxn ; j += i)
used[j] = 1;
}
}
inline int lgpow(int a, int b) {
int ans = 1;
a %= mod;
for( ; b ; b >>= 1) {
if(b & 1)
ans = (1LL * ans * a) % mod;
a = (1LL * a * a) % mod;
}
return ans;
}
inline int invmod(int x) {
return lgpow(x, mod - 2);
}
inline void solve(int x) {
int nr = 1, sum = 1;
for(int i = 0 ; i < primes.size() && primes[i] * primes[i] <= x ; ++ i) {
if(x % primes[i])
continue;
int power = 0;
while(x % primes[i] == 0) {
++ power;
x /= primes[i];
}
nr = (1LL * nr * (power + 1)) % mod;
int a = lgpow(primes[i], power + 1) - 1;
if(a < 0)
a += mod;
int b = invmod(primes[i] - 1);
sum = (1LL * sum * a * b) % mod;
}
if(x > 1) {
int a = lgpow(x, 2) - 1;
nr = (1LL * nr * 2) % mod;
if(a < 0)
a += mod;
int b = invmod(x - 1);
sum = (1LL * sum * a * b) % mod;
}
fout << nr << ' ' << sum << '\n';
}
int main() {
ciur();
fin >> n;
for(int i = 1 ; i <= n ; ++ i) {
int x;
fin >> x;
solve(x);
}
}