Pagini recente » Cod sursa (job #2471108) | Cod sursa (job #2921037) | Cod sursa (job #1110673) | Cod sursa (job #2720787) | Cod sursa (job #3039274)
#include <bits/stdc++.h>
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
const ll NMAX = 1000001;
const ll INF = (1LL << 60);
const ll nrbits = 17;
const ll MOD = 9973;
bool ciur[NMAX];
int primes[NMAX];
int cc = 0;
ll lgput(ll n, ll p) {
ll r = 1;
while(p) {
if(p % 2) {
r *= n;
r %= MOD;
}
n *= n;
n %= MOD;
p /= 2;
}
return r;
}
int main() {
#ifdef HOME
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
#endif // HOME
ciur[1] = 1;
for(int i = 2; i * i < NMAX; i++) {
if(ciur[i]) continue;
for(int j = i * i; j < NMAX; j += i)
ciur[j] = 1;
}
for(int i = 2; i < NMAX; i++) {
if(!ciur[i]) {
primes[++cc] = i;
}
}
int n, i;
cin >> n;
for(i = 1; i <= n; i++) {
int x;
cin >> x;
ll nr = 1;
ll sum = 1;
int d = 1;
while(d <= cc && primes[d] * primes[d] <= x) {
int p = 0;
while(x % primes[d] == 0) {
p++;
x /= primes[d];
}
if(p > 0) {
nr *= (p + 1);
nr %= MOD;
sum *= (lgput(primes[d], p + 1) - 1 + MOD) % MOD;
sum %= MOD;
sum *= lgput(primes[d] - 1, MOD - 2);
sum %= MOD;
}
d++;
}
if(x > 1) {
int p = 1;
nr *= 2;
nr %= MOD;
sum *= (lgput(x, p + 1) - 1 + MOD) % MOD;
sum %= MOD;
sum *= lgput(x - 1, MOD - 2);
sum %= MOD;
}
cout << nr << " " << sum << "\n";
}
}