Pagini recente » Cod sursa (job #471437) | Cod sursa (job #2652680) | Cod sursa (job #2492643) | Cod sursa (job #2581653) | Cod sursa (job #3355053)
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned ll
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int NMAX = 1e6;
const int MOD = 9973;
int q;
bool sieve[NMAX + 1];
vector<int> primes;
void compute_sieve() {
sieve[0] = sieve[1] = true;
for(int i = 2; i * i <= NMAX; i++) {
if(!sieve[i]) {
for(int j = i + i; j <= NMAX; j += i) {
sieve[j] = true;
}
}
}
for(int i = 2; i <= NMAX; i++) {
if(!sieve[i]) {
primes.push_back(i);
}
}
}
int Power(ll a, int b) {
a %= MOD;
int P = 1;
while(b) {
if(b % 2 == 1) {
P = (ll)P * a % MOD;
}
a = (ll)a * a % MOD;
b /= 2;
}
return P;
}
void get_prime_factors(ll n, int &cnt_divs, int &sum_divs) {
cnt_divs = 1;
sum_divs = 1;
int j = 0;
ll d = primes[j++];
int sz = primes.size();
while(n > 1 && j < sz) {
int e = 0;
while(n % d == 0) {
n /= d;
e++;
}
if(e) {
cnt_divs *= (e + 1);
int add = 0;
for(int i = 0; i <= e; i++) {
add = ((ll)add + Power(d, i)) % MOD;
}
sum_divs = ((ll)sum_divs * add) % MOD;
}
d = primes[j++];
if(d * d > n) {
d = n;
}
}
}
int main() {
compute_sieve();
fin >> q;
while(q--) {
ll n;
int cnt_divs, sum_divs;
fin >> n;
get_prime_factors(n, cnt_divs, sum_divs);
fout << cnt_divs << " " << sum_divs << '\n';
}
return 0;
}