Pagini recente » Cod sursa (job #643596) | Cod sursa (job #2204375) | Cod sursa (job #2775955) | Cod sursa (job #551629) | Cod sursa (job #2563895)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int Primemax = 1000000, mod = 9973;
vector <int> primenrs;
vector <pair <long long, int>> divs;
int t;
long long n;
bool e[Primemax + 5];
void Eratostene(){
for (int i = 2; i <= Primemax; i++)
if (!e[i]){
for (int j = 2 * i; j <= Primemax; j += i)
e[j] = 1;
primenrs.push_back(i);
}
}
void Divisors(){
for (auto d : primenrs){
if (d * d > n)
break;
int power = 0;
while (!(n % d)){
power++;
n /= d;
}
if (power)
divs.push_back({d, power});
}
if (n > 1)
divs.push_back({n, 1});
}
long long Number(){
int nr = 1;
for (auto i : divs)
nr *= i.second + 1;
return nr;
}
int LogPower(long long n, int p){
int ans = 1;
n %= mod;
while (p){
if (p % 2)
ans = ans * n % mod;
n = n * n % mod;
p /= 2;
}
return ans;
}
int Sum(){
long long ans = 1;
for (auto i : divs){
long long d = i.first;
int p = i.second;
long long x1 = LogPower(d, p + 1);
x1--;
if (x1 < 0)
x1 += mod;
long long x2 = LogPower(d - 1, mod - 2);
ans = ans * x1 * x2 % mod;
}
return ans;
}
int main(){
fin >> t;
Eratostene();
while (t--){
fin >> n;
Divisors();
fout << Number() << ' ' << Sum() << '\n';
divs.clear();
}
return 0;
}