Pagini recente » Cod sursa (job #148107) | Cod sursa (job #2943541) | Cod sursa (job #947939) | Cod sursa (job #2837103) | Cod sursa (job #2042554)
#include <bits/stdc++.h>
using namespace std;
const int MOD = 9973;
typedef long long LL;
int n;
bitset<1000001> not_prime;
vector<LL> primes;
void sieve() {
for(int i = 2; i <= 1000000; i++) {
if(!not_prime[i]) {
for(int j = i >> 1; j <= 1000000; j += i)
not_prime[j] = 1;
}
primes.push_back(i);
}
}
pair<LL, LL> euclid(LL x, LL y) {
if(!y) return {1, 0};
auto result = euclid(y, x % y);
return {result.second, result.first - x / y * result.second};
}
LL logPower(LL number, LL power) {
LL result = 1LL;
while(power) {
if(power & 1LL) {
result *= number;
}
number *= number;
power >>= 1LL;
}
return result;
}
void solve() {
scanf("%d ", &n);
while(n--) {
LL number;
scanf("%lld ", &number);
int divCount = 1, divSum = 1;
for(LL prime : primes) {
if(prime * prime > number)
break;
int power = 1;
while(number % prime == 0) {
power++;
number /= prime;
}
if(power != 1) {
divSum *= (logPower(prime, power) - 1) / (prime - 1);
divSum %= MOD;
divCount *= power;
}
}
if(number != 1) {
divSum *= (logPower(number, 2) - 1) / (number - 1);
divSum %= MOD;
divCount *= 2;
}
printf("%d %d\n", divCount, divSum);
}
}
int main() {
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
sieve();
solve();
return 0;
}