Pagini recente » Cod sursa (job #827427) | Cod sursa (job #2591745) | Cod sursa (job #453448) | Cod sursa (job #84557) | Cod sursa (job #2593246)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
//long long expLog(int a, int b);
void construiestePrime(int& ind, int Prime[], bool prime[], const int N);
int main()
{
const int Dim = 1001000;
int ind;
int Prime[Dim];
bool prime[Dim] = {0};
long long factor;
int n, sdiv;
long long div, nrdiv, exp;
int indd;
long long produs;
construiestePrime(ind, Prime, prime, Dim);
fin >> n;
for(int i = 1; i <= n; ++i)
{
fin >> div;
indd = 1;
sdiv = 1;
nrdiv = 1;
factor = Prime[indd];
while(div != 1)
{
exp = 0;
produs = factor;
while(div % factor == 0)
{
div = div / factor;
exp++;
produs = produs * factor;
}
//fout << "factor: " << factor << " exp: " << exp << '\n';
nrdiv = nrdiv * (exp + 1);
sdiv = (sdiv * (((produs - 1) / (factor - 1)) % 9973)) % 9973;
if(factor * factor> div)
factor = div;
else
factor = Prime[++indd];
}
fout << nrdiv << ' ' << sdiv << '\n';
}
fin.close();
fout.close();
return 0;
}
/*long long expLog(int a, int b)
{
long long r;
if(b == 1)
return a;
r = expLog(a, b / 2);
if(b % 2 == 0)
return r * r;
return a * r * r;
}
*/
void construiestePrime(int& ind, int Prime[], bool prime[], const int N)
{
ind = 0;
prime[0] = prime[1] = 1;
for(int i = 2; i * i <= N; ++i)
if(prime[i] == 0)
for(int j = i * i; j <= N; j += i)
prime[j] = 1;
for(int i = 2; i <= N; ++i)
if(prime[i] == 0)
Prime[++ind] = i;
/*for(int i = 1; i <= ind; ++i)
fout << Prime[i] << ' ';
fout << '\n';*/
}