Pagini recente » Cod sursa (job #2935998) | Cod sursa (job #1062219) | Cod sursa (job #2091706) | Cod sursa (job #2049582) | Cod sursa (job #1129489)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream in ("ssnd.in");
ofstream out ("ssnd.out");
const int MAXN = 1000000;
const int MOD = 9973;
int K;
bitset <1000010> Ciur;
int Prime[80000];
void Make_Ciur ()
{
int i, j;
for (i = 3; i * i <= MAXN; i += 2)
if (!Ciur[i])
for (j = i * i; j <= MAXN; j += 2 * i)
Ciur[j] = 1;
Prime[++ K] = 2;
for (i = 3; i <= MAXN; i += 2)
if (!Ciur[i])
Prime[++ K] = i;
}
inline int lgpow (int A, int P)
{
int ret = 1;
A %= MOD;
for ( ; P; P >>= 1){
if (P & 1)
ret = (1LL * ret * A) % MOD;
A = (1LL * A * A) % MOD;
}
return ret;
}
void Solve ()
{
long long N, nr = 1;
int i, e, p1, p2, sum = 1;
in >> N;
for (i = 1; i <= K && 1LL * Prime[i] * Prime[i] <= N; i ++){
if (N % Prime[i])
continue;
e = 0;
while (N % Prime[i] == 0){
N /= Prime[i];
e ++;
}
p1 = (lgpow (Prime[i], e + 1) - 1 + MOD) % MOD;
p2 = lgpow (Prime[i] - 1, MOD - 2);
sum = (((sum * p1) % MOD) * p2) % MOD;
nr *= 1LL * (e + 1);
}
if (N > 1){
nr *= 2;
sum = (1LL * sum * (N + 1)) % MOD;
}
out << nr << " " << sum << "\n";
}
int main()
{
Make_Ciur ();
int T;
for (in >> T; T; T --)
Solve ();
return 0;
}