Pagini recente » Cod sursa (job #3149337) | Cod sursa (job #973860) | Cod sursa (job #3204177) | Cod sursa (job #1100320) | Cod sursa (job #3302453)
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int NMAX = 100001, VMAX = 1000001, MOD = 9973;
bool prime[VMAX];
int nrPrime[NMAX], catePrime = 0;
void ciur(int N)
{
for (int i = 2; i * i <= N; i++)
{
if (prime[i] == 0)
{
for (int j = i * i; j <= N; j += i)
{
prime[j] = 1;
}
}
}
/// am calculat in vectorul prime pentru fiecare nr daca e prim sau nu
for (int i = 2; i <= N; i++)
{
if (prime[i] == 0)
{
nrPrime[++catePrime] = i;
}
}
}
void ssnd(long long N)
{
long long sumaDiv = 1, nrDiv = 1;
for (int i = 1; 1LL * nrPrime[i] * nrPrime[i] <= N && i <= catePrime; i++)
{
if (N % nrPrime[i] == 0)
{
int exp = 0;
long long pk = 1;
while (N % nrPrime[i] == 0)
{
N /= nrPrime[i];
exp++;
pk *= nrPrime[i];
}
/// pk = nrPrime[i] ^ k
nrDiv *= (exp + 1);
sumaDiv = sumaDiv * (pk * nrPrime[i] - 1) / (nrPrime[i] - 1) % MOD;
}
}
if (N > 1)
{
/// mai exista un factor prim
/// N ^ 1, N - prim
nrDiv *= 2;
sumaDiv = sumaDiv * (N + 1) % MOD;
}
g << nrDiv << ' ' << sumaDiv << '\n';
}
int main()
{
int T, i;
long long n;
f >> T;
ciur(VMAX - 1);
for (i = 1; i <= T; i++)
{
f >> n;
ssnd(n);
}
return 0;
}