Pagini recente » Cod sursa (job #742892) | Cod sursa (job #3040595) | Cod sursa (job #476450) | Cod sursa (job #624078) | Cod sursa (job #2592980)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
unsigned long long expLog(unsigned long long a, unsigned long long b);
void construiestePrime(unsigned long long& ind, unsigned long long Prime[], bool prime[], const int N);
unsigned long long RidicareLogaritmica(unsigned long long N, unsigned long long P);
int main()
{
const int Dim = 1000000;
unsigned long long ind;
unsigned long long Prime[Dim];
bool prime[Dim] = {0};
unsigned long long n, div, sdiv, nrdiv, exp;
unsigned long long indd;
construiestePrime(ind, Prime, prime, Dim);
fin >> n;
for(unsigned long long i = 1; i <= n; ++i)
{
fin >> div;
indd = 1;
sdiv = 1;
nrdiv = 1;
while(div != 1)
{
exp = 0;
while(div % Prime[indd] == 0)
{
div = div / Prime[indd];
exp++;
}
nrdiv = nrdiv * (exp + 1);
sdiv = ((sdiv % 9973) * (((RidicareLogaritmica(Prime[indd], exp + 1) - 1) / (Prime[indd] - 1)) % 9973)) % 9973;
indd++;
if(Prime[indd] * Prime[indd] > div && div != 1)
{
nrdiv = nrdiv * 2;
sdiv = ((sdiv % 9973) * (((RidicareLogaritmica(div, 2) - 1) / (div - 1)) % 9973)) % 9973;
//cout << div << ' ' << expLog(div, 2) - 1 << '\n';
break;
}
}
fout << nrdiv << ' ' << sdiv << '\n';
}
fin.close();
fout.close();
return 0;
}
unsigned long long expLog(unsigned long long a, unsigned long long b)
{
if(b == 1)
return a;
else if(b % 2 == 0)
return expLog(a * a, b / 2);
return a * expLog(a * a, b / 2);
}
void construiestePrime(unsigned long long& ind, unsigned long long Prime[], bool prime[], const int N)
{
ind = 0;
for(long long i = 2; i * i <= N; ++i)
if(prime[i] == 0)
for(long long j = i * i; j <= N; j += i)
prime[j] = 1;
for(long long i = 2; i <= N; ++i)
if(prime[i] == 0)
Prime[++ind] = i;
/* for(unsigned long long i = 1; i <= ind; ++i)
fout << Prime[i] << ' ';
fout << '\n';*/
}
unsigned long long RidicareLogaritmica(unsigned long long N, unsigned long long P)
{
unsigned long long r = 1;
while(P)
{
if(P % 2 == 1)
r = (1LL * r * N) % 9973;
N = (1LL * N * N) % 9973;
P = P / 2;
}
return r;
}