Pagini recente » Cod sursa (job #824222) | Cod sursa (job #592774) | Cod sursa (job #942295) | Cod sursa (job #2621675) | Cod sursa (job #687147)
Cod sursa(job #687147)
#include <fstream>
#include <bitset>
using namespace std;
#define MOD 9973
#define MAX 1000000
#define ll long long
int P[MAX], T, K, S, NR;
ll N;
bitset <MAX> B;
int pow (int, int);
void ciur (), descompunere ();
int main () {
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
ciur ();
f >> T;
for ( ; T; T--) {
f >> N;
descompunere ();
g << NR << " " << S << "\n";
}
return 0;
}
int pow (int a, int exp) {
exp %= MOD; a %= MOD;
int sol = 1; int p = a;
for ( ; exp; exp >>= 1) {
if (exp & 1)
sol = (sol * p) % MOD;
p = (p * p) % MOD;
}
return sol;
}
void ciur () {
int i, j;
for (i = 2; i <= MAX; i++)
if (!B[i]) {
P[++K] = i;
for (j = 2 * i; j <= MAX; j += i)
B[j] = 1;
}
}
void descompunere () {
int Y1, Y2, E;
NR = 1; S = 1;
for (int i = 1; i <= K && 1LL * P[i] * P[i] <= N; i++) {
if (N % P[i]) continue;
int E = 0;
while (N % P[i] == 0) {
E++;
N /= P[i];
}
NR *= (E + 1);
Y1 = (pow (P[i], E + 1) - 1) % MOD;
Y2 = pow (P[i] - 1, MOD - 2);
S = (((S * Y1) % MOD) * Y2) % MOD;
}
if (N > 1) {
NR = (NR << 1) % MOD;
S = (1LL * S * (N + 1)) % MOD;
}
}