Pagini recente » Cod sursa (job #1258925) | Cod sursa (job #2385535) | Cod sursa (job #1877509) | Cod sursa (job #1172049) | Cod sursa (job #3151835)
#include <fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int NMAX = 1000000;
bool v[NMAX + 1];
int nPrime[NMAX + 1];
const int MOD = 9973;
unsigned long long RidicareLogaritmica(unsigned long long N, unsigned long long P)
{
unsigned long long r = 1;
N %= MOD;
while(P)
{
if(P % 2 == 1)
r = (1ULL * r * N) % MOD;
N = (1ULL * N * N) % MOD;
P = P / 2;
}
return r;
}
void ciur(int n)
{
int i, j;
v[0] = v[1] = 1;
for(i = 4; i <= n; i += 2)
v[i] = 1;
for(i = 3; i * i <= n; i += 2)
{
if(v[i] == 0)
{
for(j = i * i; j <= n; j += i)
v[j] = 1;
}
}
int nDiv = 1;
nPrime[nDiv] = 2;
for(int i = 3; i <= n; i += 2)
if(v[i] == 0)
nPrime[++nDiv] = i;
//g << nDiv;
}
int Putere(int A, int n)
{
int P = 1;
while(n)
{
if(n % 2 == 1)
P = P * A;
A = A * A;
n /= 2;
}
return P;
}
int main()
{
ciur(NMAX + 1);
int t;
long long n;
f >> t;
for(int i = 1; i <= t; i++)
{
f >> n;
int nrd = 1;
unsigned long long ndv = 1, sumDiv = 1;
while(n > 1)
{
int div = nPrime[nrd];
if(n % div == 0)
{
int pow = 0;
while(n % div == 0)
{
pow++;
n /= div;
}
ndv *= (pow + 1);
sumDiv *= ((RidicareLogaritmica(div, pow + 1) - 1) / (div - 1)) % MOD;
}
nrd++;
}
g << ndv << ' ' << sumDiv << '\n';
}
return 0;
}