Pagini recente » Cod sursa (job #951636) | Cod sursa (job #1100020) | Cod sursa (job #2291269) | Cod sursa (job #717656) | Cod sursa (job #2191506)
#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; 1LL * primes[i] * primes[i] <= n; i++)
{
if(n % primes[i])
continue;
int p = 0;
while(n % primes[i] == 0)
{
n /= primes[i];
p++;
}
int ans1 = (exp(primes[i], p + 1) - 1) % MOD;
int ans2 = exp(primes[i] - 1, MOD - 2) % MOD;
numDivs = (numDivs * (p + 1)) % MOD;
sumDivs = ((sumDivs * ans1) % MOD * ans2) % MOD;
}
if(n != 1)
{
numDivs = (numDivs * 2) % MOD;
sumDivs = (1LL * sumDivs * (n + 1)) % 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 += 2)
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)
{
a %= MOD;
int ans;
for(ans = 1; b; b >>= 1)
{
if(b & 1)
ans = (ans * a) % MOD;
a = (a * a) % MOD;
}
return ans;
}