Pagini recente » Monitorul de evaluare | Cod sursa (job #2476960) | Istoria paginii runda/surprize_surprize/clasament | Cod sursa (job #2355284) | Cod sursa (job #2098331)
#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, sum1, sum2, 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;
sum1 = sum2 = nr = 1;
ll xx = x, n = 0;
for(auto i : primes){
if(i > x)
break;
cnt = 0;
while(x % i == 0 || x == i)
cnt++, x /= i;
if(cnt){
n++;
mul(nr, cnt + 1);
mul(sum1, lgput(i, cnt + 1) - 1);
mul(sum2, i - 1);
}
}
if(n == 0 || (x >= N)){
mul(nr, 2);
mul(sum1, lgput(x, 2) - 1);
mul(sum2, x - 1);
}
mul(sum1, lgput(sum2, mod - 2));
out << nr << ' ' << sum1 << '\n';
}
int main(){
in >> t;
precalc();
while(t--)
solve();
return 0;
}