Pagini recente » Cod sursa (job #1304397) | Cod sursa (job #2831836) | Cod sursa (job #1251524) | Cod sursa (job #1348694) | Cod sursa (job #2098318)
#include <bits/stdc++.h>
#define mod 9973
#define ll long long
#define N 1000002
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int t;
ll x, sum, nr, cnt;
vector <ll> primes;
bool viz[1000100];
void add(ll &n, ll val){
n = (n + val) % mod;
}
void mul(ll &n, ll val){
n = (n * val) % mod;
}
void precalc(){
for(int i = 2; i <= N; i++)
if(!viz[i]){
primes.push_back(i);
for(int j = i + i; j <= N; j += i)
viz[j] = 1;
}
}
ll lgput(ll a, ll p){
ll rs = 1;
while(p){
if(p & 1)
mul(rs, a);
mul(a, a);
p /= 2;
}
return rs;
}
void gcd(ll a, ll b, ll &d, ll &x, ll &y){
if(!b){
d = a;
x = 1;
y = 0;
} else{
ll xx, yy;
gcd(b, a % b, d, xx, yy);
x = yy;
y = xx - yy * (a / b);
}
}
ll invers(int a){
ll b = mod, d, x, y;
gcd(a, b, d, x, y);
while(x < 0)
x += mod;
return x % mod;
}
void solve(){
in >> x;
sum = nr = 1;
ll xx = x;
vector <pair <ll, ll> > v;
for(auto i : primes){
if(i > x)
break;
cnt = 0;
while(x % i == 0 || x == i)
cnt++, x /= i;
if(cnt)
v.push_back({i, cnt});
}
if(v.size() == 0 || (x >= N))
v.push_back({xx, 1});
for(auto i : v){
mul(nr, i.second + 1);
mul(sum, lgput(i.first, i.second + 1) - 1);
mul(sum, invers(i.first - 1));
}
out << nr << ' ' << sum << '\n';
}
int main(){
in >> t;
precalc();
while(t--)
solve();
return 0;
}