Pagini recente » Cod sursa (job #893762) | Cod sursa (job #1163474) | Cod sursa (job #2459789) | Cod sursa (job #1357834) | Cod sursa (job #687131)
Cod sursa(job #687131)
#include <fstream>
#include <vector>
#include <bitset>
#include <cstring>
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 (ll);
int main () {
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
ciur ();
f >> T;
for ( ; T; T--) {
f >> N;
descompunere (N);
g << NR << " " << S << "\n";
}
return 0;
}
int pow (int a, int exp) {
int sol = 1; int p = a;
for (exp %= MOD; 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 (ll N) {
ll M = N; int Y1, Y2, E; NR = 1; S = 1;
for (int i = 1; i <= K && 1LL * P[i] * P[i] <= N; i++) {
E = 0;
while (M % (ll) P[i] == 0) {
E++;
M /= (ll) P[i];
}
if (E) {
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 (M > 1) {
NR = (NR << 1) % MOD;
S = (1LL * S * (N + 1)) % MOD;
}
}