Pagini recente » Cod sursa (job #2446170) | Cod sursa (job #1341488) | Cod sursa (job #1150151) | Cod sursa (job #1275348) | Cod sursa (job #1083604)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int LIM = 1e6;
const int MOD = 9973;
vector <bool> E(LIM + 10, 1);
vector <int> prim;
long long T, N, sd, nd, fr;
void Precompute()
{
for(int i = 4; i <= LIM; i += 2)
E[i] = 0;
prim.push_back(2);
for(int i = 3; i <= LIM; i += 2)
if(E[i])
{
prim.push_back(i);
for(int j = i + i; j <= LIM; j += i)
E[j] = 0;
}
}
int pow(int x, int p)
{
int rez = 1; x %= MOD;
for(; p; p >>= 1)
{
if(p & 1)
{
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
}
return rez;
}
int main()
{
Precompute();
fin >> T;
while(T--)
{
fin >> N;
nd = sd = 1;
for(int i = 0; i < prim.size() && 1LL * prim[i] * prim[i] <= N; i++)
if(!(N % prim[i]))
{
fr = 0;
while(!(N % prim[i]))
{
N /= prim[i];
fr++;
//cout<<N<<' ';
}
//cout<<endl;
nd *= (fr + 1);
int p1 = (pow(prim[i], fr + 1) - 1) % MOD;
int p2 = (pow(prim[i] - 1, MOD - 2)) % MOD;
sd = (((sd * p1) % MOD) * p2) % MOD;
}
if(N > 1)
{
nd *= 2;
sd = (1LL * sd * (N + 1)) % MOD;
}
fout<<nd<<' '<<sd<<'\n';
}
return 0;
}