Pagini recente » Cod sursa (job #2503176) | Cod sursa (job #930813) | Cod sursa (job #1317227) | Cod sursa (job #1485998) | Cod sursa (job #2664111)
#include <cstdio>
using namespace std;
#define MAX 1000001
#define MOD 9973
bool er[MAX];
long long primes[MAX];
long long sum, num, primesno;
void erathostenes() {
for(long i=2;i<MAX; ++i)
if (! er[i]) {
++primesno;
primes[primesno] = i;
for(long j=i; j<MAX; j+= i)
er[i] = true;
}
}
int pow(int x, int p) {
int res = 1;
x %= MOD;
while(p) {
if (p & 1)
res = res * x % MOD;
x = x * x % MOD;
p /= 2;
}
return res;
}
void solve(long long x) {
sum = num = 1;
int divno = 0;
for(long long i=1; primes[i]*primes[i] <=x && i < primesno; ++i)
if (x % primes[i] == 0) {
divno = 0;
while(x % primes[i] == 0) {
x /= primes[i];
++divno;
}
num *= divno + 1;
int p1 = pow(primes[i], divno + 1) - 1;
int p2 = pow(primes[i] - 1, MOD - 2);
sum = sum * p1 % MOD * p2 % MOD;
}
if (x > 1) {
num *= 2;
sum = sum * (x + 1) % MOD;
}
}
int main() {
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
int n;
long long x;
scanf("%d", &n);
erathostenes();
for(int i=1; i<=n; ++i) {
scanf("%lld", &x);
solve(x);
printf("%lld %lld\n", num, sum);
}
return 0;
}