Pagini recente » Cod sursa (job #1398338) | Cod sursa (job #2161111) | Cod sursa (job #2096928) | Cod sursa (job #300701) | Cod sursa (job #2599810)
#include <bits/stdc++.h>
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
typedef long long ll;
int t, l;
int pown[15], invmod[10000];
ll n, sol1, sol2;
vector<int> primes;
pair<int, int> decomposition[15];
bitset<1000005> sieve;
void decompose(ll val);
int calcinv(int val);
int main()
{
for(int i = 2; i <= 1000000; ++i){
if(!sieve[i]){
primes.push_back(i);
for(int j = 2 * i; j <= 1000000; j += i) sieve[j] = true;
}
}
for(int i = 1; i < 9973; ++i) invmod[i] = calcinv(i);
fin >> t;
while(t--){
fin >> n;
sol1 = sol2 = 1;
decompose(n);
for(int i = 1; i <= l; ++i){
sol1 = (sol1 * (decomposition[i].second + 1)) % MOD;
sol2 = (sol2 * invmod[(decomposition[i].first - 1) % MOD]) % MOD;
int mult = 1;
for(int j = 1; j <= decomposition[i].second + 1; ++j) mult = (mult * decomposition[i].first) % MOD;
--mult;
if(mult < 0) mult += MOD;
sol2 = (sol2 * mult) % MOD;
}
fout << sol1 << " " << sol2 << "\n";
}
return 0;
}
void decompose(ll val){
l = 0;
for(auto it:primes){
if(1LL * it * it > val) break;
if(!(val % it)){
decomposition[++l] = {it, 0};
while(!(val % it)){
++decomposition[l].second;
val /= it;
}
}
}
if(val > 1) decomposition[++l] = {val, 1};
}
int calcinv(int val){
pown[0] = val;
for(int i = 1; i < 15; ++i) pown[i] = (pown[i - 1] * pown[i - 1]) % MOD;
int where = MOD - 2, sol = 1;
while(where){
int lg2 = int(log2(where));
where -= (1 << lg2);
sol = (sol * pown[lg2]) % MOD;
}
return sol;
}