Pagini recente » Cod sursa (job #2076188) | Cod sursa (job #752867) | Cod sursa (job #2735530) | Cod sursa (job #1935031) | Cod sursa (job #2199344)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int MOD = 9973;
bool v[1000001];
int p[78500], nrp, t;
int nrdiv, sumdiv;
long long n;
void ciur(int n)
{
v[0] = v[1] = 1;
for(int i = 4; i <= n; i += 2)
v[i] = 1;
for(int i = 3; i * i <= n; i += 2)
if(v[i] == 0)
for(int j = i * i; j <= n; j += i)
v[j] = 1;
}
int putere(int x, int ex)
{
int q = 1;
while(ex > 0)
if(ex % 2 == 0)
{
x = 1LL * x * x % MOD;
ex /= 2;
}
else
{
q = 1LL * q * x % MOD;
ex--;
}
return q;
}
void descf(long long n)
{
nrdiv = 1, sumdiv = 1;
for(int i = 1; i <= nrp && 1LL * p[i]*p[i] <= n; i++)
if(n % p[i] == 0)
{
int ex = 0;
do
{
ex++;
n /= p[i];
}
while(n % p[i] == 0);
nrdiv = 1LL * nrdiv * (ex + 1) % MOD;
sumdiv = 1LL * sumdiv * (putere(p[i], ex + 1) - 1 + MOD) % MOD * putere(p[i] - 1, MOD - 2) % MOD;
}
if(n > 1)
{
nrdiv = nrdiv * 2LL % MOD;
sumdiv = sumdiv * (n + 1) % MOD;
}
}
int main()
{
ciur(1000000);
p[++nrp] = 2;
for(int i = 3; i <= 1000000; i += 2)
if(v[i] == 0)
p[++nrp] = i;
f >> t;
for(int i = 1;i <= t; i++)
{
f >> n;
descf(n);
g << nrdiv << ' ' << sumdiv << '\n';
}
return 0;
}