Pagini recente » Cod sursa (job #1344061) | Cod sursa (job #356349) | Cod sursa (job #489763) | Cod sursa (job #1914910) | Cod sursa (job #1098094)
#include<stdio.h>
#define MOD 9973
int t;
int prime[1000001];
int k;
char visited[10000000];
void sieve() {
int i, j;
k = 0;
for (i = 2; i * i <= 1000001; ++i) {
if (!visited[i]) {
prime[++k] = i;
for (j = i + i; j <= 1000001; j += i) {
visited[j] = 1;
}
}
}
}
int pw(int number, int p) {
int result = 1;
number %= MOD;
for (; p; p >>= 1) {
if (p & 1) {
result *= number;
result %= MOD;
}
number *= number;
number %= MOD;
}
return result;
}
long long readFromFile(FILE *fin) {
long long number;
fscanf(fin, "%lld", &number);
return number;
}
void printToFile(FILE *fout, int number, int sum) {
fprintf(fout, "%d %d\n", number, sum);
}
void process() {
FILE *fin, *fout;
long long n;
long i;
int number, sum, power, p1, p2;
fin = fopen("ssnd.in", "r");
fout = fopen("ssnd.out", "w");
t = (int)readFromFile(fin);
do {
n = readFromFile(fin);
number = sum = 1;
for (int i = 1; i <= k && 1ll * prime[i] * prime[i] <= n; ++i) {
if (n % prime[i]) continue;
power = 0;
while (n % prime[i] == 0) {
++power;
n /= prime[i];
}
number *= (1 + power);
p1 = (pw(prime[i], power + 1) - 1) % MOD;
p2 = pw(prime[i] - 1, MOD - 2) % MOD;
sum = (((sum * p1) % MOD) * p2) % MOD;
}
if (n > 1) {
number *= 2;
sum = (1ll * sum * (n + 1) % MOD);
}
printToFile(fout, number, sum);
--t;
} while (t);
fclose(fin);
fclose(fout);
}
int main() {
sieve();
process();
return 0;
}