Pagini recente » Cod sursa (job #2261277) | Cod sursa (job #1046576) | Cod sursa (job #1471817) | Cod sursa (job #29285) | Cod sursa (job #2877362)
#include <iostream>
#include <bitset>
#include <vector>
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const long long NMAX = 1e6 + 10;
const long long MOD = 9973;
bitset <NMAX> v;
vector<long long> Prime;
void ciur(long long n)
{
Prime.push_back(2);
v[0] = 1;
for(long long i = 3; i <= n; i += 2)
if(v[i] == 0)
{
Prime.push_back(i);
for(long long j = i * 2; j <= n; j += i)
v[j] = 1;
}
}
long long powlg(long long x, long long n)
{
long long val = 1;
while(n > 0)
{
if(n & 1)
val = 1LL * val * x % MOD;
x = 1LL * x * x % MOD;
n >>= 1;
}
return val;
}
long long inversMod(long long x)
{
return powlg(x, MOD - 2) % MOD;
}
int main()
{
ciur(NMAX);
long long T;
f >> T;
while(T--)
{
long long ans = 1, nrDiv = 1;
long long n;
f >> n;
for(long long i : Prime)
if(i * i > n)break;
else if(n % i)continue;
else
{
long long p = 0;
while(n % i == 0)
{
n /= i;
++p;
}
nrDiv *= p + 1;
long long x = powlg(i, p + 1) - 1;
x *= inversMod(i - 1);
ans = 1LL * ans * x % MOD;
}
if(n > 1)
{
nrDiv *= 2;
long long x = powlg(n, 2) - 1;
x *= inversMod(n - 1);
ans = 1LL * ans * x % MOD;
}
g << nrDiv << ' ' << ans << '\n';
}
return 0;
}