Pagini recente » Monitorul de evaluare | Cod sursa (job #494489) | Cod sursa (job #1623770) | Cod sursa (job #2672968) | Cod sursa (job #2046985)
#include <bits/stdc++.h>
using namespace std;
vector<int> ciurulet;
bool viz[1000010];
const int fi = 9972;
const int mod = 9973;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
void build(){
for(int i = 2; i <= 1000001; ++i){
if(!viz[i]){
ciurulet.push_back(i);
for(int j = i; j <= 1000001; j += i){
viz[j] = true;
}
}
}
}
int put(int a, int b){
int ans = 1;
while(b){
if(b % 2 == 0){
a = a * a % mod;
b /= 2;
}
else{
ans = ans*a%mod;
--b;
}
}
return ans;
}
int main(){
int t;
f >> t;
build();
while(t--){
long long n;
f >> n;
long long nr = 1;
long long sum = 1;
for(int i = 0; i < ciurulet.size() && 1LL*ciurulet[i]*ciurulet[i] <= n; ++i){
if(n % ciurulet[i]) continue;
int p = 0;
while(n % ciurulet[i] == 0){
n /= ciurulet[i];
++p;
}
nr = nr * (p+1) % mod;
int p1 = (put(ciurulet[i], p+1) - 1) % mod;
int p2 = put(ciurulet[i]-1, fi-1) % mod;
sum = (((1LL*sum*p1)%mod)*p2)%mod;
}
if(n != 1){
nr *= 2;
nr %= mod;
sum = (1LL*sum*(n+1)%mod);
}
g << nr << ' ' << sum << '\n';
}
return 0;
}