Pagini recente » Cod sursa (job #2311566) | Cod sursa (job #1661898) | Cod sursa (job #2144883) | Cod sursa (job #1297863) | Cod sursa (job #2191490)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int LIM = 1e6, MOD = 9973;
int t;
long long n;
int sumDivs, numDivs;
bool c[LIM + 2];
vector<int> primes;
void ciur();
int exp(int a, int b);
int main()
{
ciur();
in >> t;
while(t--)
{
numDivs = sumDivs = 1;
in >> n;
for(int i = 0; primes[i] * primes[i] <= n; i++)
{
int p = 0;
while(n % primes[i] == 0)
{
n /= primes[i];
p++;
}
numDivs = (numDivs * (p + 1)) % MOD;
sumDivs = (sumDivs * (exp(primes[i], p + 1) - 1) * exp(primes[i] - 1, MOD - 2)) % MOD;
}
if(n != 1)
{
numDivs = (numDivs * 2) % MOD;
sumDivs = (sumDivs * (exp(n, 2) - 1) * exp(n - 1, MOD - 2)) % MOD;
}
out << numDivs << ' ' << sumDivs << '\n';
}
return 0;
}
void ciur()
{
c[0] = c[1] = true;
for(int i = 4; i <= LIM; i += 2)
c[i] = true;
for(int i = 3; i * i <= LIM; i++)
if(!c[i])
for(int j = i * i; j <= LIM; j += 2 * i)
c[j] = true;
for(int i = 2; i <= LIM; i++)
if(!c[i])
primes.push_back(i);
}
int exp(int a, int b)
{
int ans;
for(ans = 1; b; b >>= 1)
{
if(b & 1)
ans = (ans * a) % MOD;
a = (a * a) % MOD;
}
return ans;
}