Pagini recente » Cod sursa (job #944604) | Cod sursa (job #1390879) | Cod sursa (job #1715877) | Cod sursa (job #1777242) | Cod sursa (job #1984370)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int MOD = 9973;
long long n;
long long nrDiv, sum;
bool compus[1000000 + 5];
vector<long long> prime;
void ciur()
{
for(int i = 2; i <= 1e3; ++i)
for(int j = i * i; j <= 1e6; j += i)
compus[j] = true;
for(int i = 2; i <= 1e6; ++i)
if(compus[i] == false)
prime.push_back(i);
}
long long power(long long base, long long exp)
{
if(exp == 0)
return 1;
if(exp % 2 == 0)
{
int x = power(base, exp / 2);
return (x * x) % MOD;
}
return (base * power(base, exp - 1)) % MOD;
}
inline long long invers(long long x)
{
return power(x, MOD - 2);
}
void rezolvare()
{
vector<pair<int, int> > factori; //.first = base, .second = exp
int nr;
for(int i = 0; i < prime.size() && prime[i] * prime[i] <= n; ++i)
{
nr = 0;
while(n % prime[i] == 0)
{
nr++, n /= prime[i];
}
if(nr != 0)
factori.push_back(make_pair(prime[i], nr));
}
if(n != 1)
factori.push_back(make_pair(n, 1));
long long base, exp;
nrDiv = 1;
sum = 1;
long long x = 0;
for(auto &p:factori)
{
base = (p.first % MOD);
exp = p.second;
nrDiv *= (exp + 1);
x = ((power(base, exp + 1) - 1) * invers(base - 1)) % MOD;
sum = (sum * x) % MOD;
}
}
int main()
{
ciur();
int t;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
in >> t;
for(int i = 1; i <= t; ++i)
{
in >> n;
rezolvare();
out << nrDiv << " " << sum << "\n";
}
in.close();
out.close();
return 0;
}