Pagini recente » Cod sursa (job #542445) | Cod sursa (job #1307768) | Cod sursa (job #2400525) | Cod sursa (job #1292766) | Cod sursa (job #2789984)
#include <fstream>
#include <cmath>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
#define MAX 1000001
#define PRIME 9973
int countDivisors(vector<pair<int, int>> decomp)
{
int cnt = 1;
for (pair<int, int> p : decomp)
{
cnt *= (p.second + 1);
}
return cnt;
}
long long divisorsSum(vector<pair<int, int>> decomp)
{
long long prod = 1;
for (pair<int, int> p : decomp)
{
prod *= ((pow(p.first, p.second + 1) - 1) / (p.first - 1));
prod %= PRIME;
}
return prod;
}
int main()
{
int t, n;
fin >> t;
bool isPrime[MAX];
fill(isPrime, isPrime + MAX + 1, true);
for (int i = 2; i < MAX; ++i)
{
if (isPrime[i])
{
for (int j = 2; j * i <= n; ++j)
{
isPrime[j * i] = false;
}
}
}
while (t-- > 0)
{
fin >> n;
vector<pair<int, int>> decomp;
int init = n;
for (int i = 2; i <= n; ++i)
{
if (n % i == 0)
{
if (isPrime[i])
{
int k = i;
int exp = 0;
while (n % k == 0)
{
n /= k;
++exp;
}
decomp.push_back({k, exp});
}
}
}
if (decomp.empty())
{
decomp.push_back({init, 1});
}
fout << countDivisors(decomp) << " " << divisorsSum(decomp) << "\n";
}
return 0;
}