Pagini recente » Cod sursa (job #1731372) | Istoria paginii utilizator/okrosalexandru | Cod sursa (job #1585089) | Profil torrranon | Cod sursa (job #2869814)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int modulo = 9973;
const int nmax = 1e6;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool c[nmax+5];
int prime[nmax+5];
int nr;
void sieve() {
for(int i=3; i*i<=nmax; i+=2)
if(!c[i])
for(int j=i*i; j<=nmax; j+=i)
c[j] = true;
prime[++nr] = 2;
for(int i=3; i<=nmax; i+=2) if(!c[i]) prime[++nr] = i;
}
ll lgput(ll base, ll exp) {
ll temp = 1;
while(exp) {
if(exp%2) temp = temp * base % modulo;
base = base * base % modulo;
exp /= 2;
}
return temp;
}
int fc[nmax+5];
int e[nmax+5];
void solveFor(ll x) {
int nrf = 0;
int k = 1;
while(prime[k] * prime[k] <= x and k<=nr) {
if(x % prime[k] == 0) {
fc[++nrf] = prime[k];
e[nrf] = 0;
while(x % prime[k] == 0) {
e[nrf] ++;
x /= prime[k];
}
}
k++;
}
if(x!=1) {
fc[++nrf] = x;
e[nrf] = 1;
}
ll prod = 1;
ll sum = 1;
for(int i=1; i<=nrf; i++) {
prod = prod * 1LL * (e[i] + 1);
ll top = lgput(fc[i], e[i]+1) - 1;
if(top<0) top = top + modulo;
ll bot = lgput(fc[i]-1, modulo-2);
sum = (sum * 1LL * ((top * bot) % modulo)) % modulo;
}
g << prod << " " << sum << "\n";
}
int main() {
sieve();
int t; f >> t;
for(int cas=1; cas<=t; cas++) {
ll x; f >> x;
solveFor(x);
}
return 0;
}