Pagini recente » Cod sursa (job #3124447) | Cod sursa (job #1879705) | Cod sursa (job #1526538) | Cod sursa (job #3127553) | Cod sursa (job #2610484)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int NMAX = 1000005;
const int MOD = 9973;
vector <int> primes;
bool ciur[NMAX / 2] = {0};
long long sum_div, nr_div, power, val, pr;
void init()
{
primes.resize(NMAX / 2);
for (int i = 2; i * i < NMAX; i++)
if (!ciur[i])
{
primes.push_back(i);
for (int j = i * i; j < NMAX; j += i)
ciur[j] = 1;
}
}
void divizori(long long numar)
{
nr_div = sum_div = 1;
for(unsigned int i = 1; i <= primes.size() && primes[i] * primes[i] * 1LL <= numar; i++)
{
power = 0; pr = 1;
while(!(numar % primes[i]))
{
numar /= primes[i];
power++;
pr *= primes[i];
}
if (power)
{
nr_div *= (power + 1);
sum_div = ((sum_div * (pr * primes[i] - 1)) / (primes[i] - 1)) % MOD;
}
}
if(numar > 1)
{
nr_div *= 2;
sum_div = (sum_div * (numar + 1)) % MOD;
}
fout << nr_div << ' ' << sum_div << '\n';
}
int main()
{
int nr; fin >> nr;
init();
for (int i = 0; i < nr; i++)
{
fin >> val;
divizori(val);
}
return 0;
}