Pagini recente » Cod sursa (job #2494893) | Cod sursa (job #790532) | Cod sursa (job #2200818) | Cod sursa (job #2676689) | Cod sursa (job #3301442)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 9973; // o sa fac mod doar la final, din trei motive:
// 1: suma divizorilor NU are cum sa fie peste long long
// 2: constanta mai buna, fara atatea moduri
// 3: atunci cand impart la p - 1 cu invers modular s-ar putea sa se strice ceva,
// daca exista un p = 9973 * x + 1
vector<int> primes;
bool ciur[1000005];
struct pf{
int d, e;
};
int binexp(int b, int e){
int ans = 1;
while(e){
if(e & 1){
ans *= b;
}
b *= b;
e >>= 1;
}
return ans;
}
signed main()
{
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
ciur[0] = ciur[1] = 1;
for(int i = 2; i <= 1e6; i++){
if(!ciur[i]){
primes.push_back(i);
for(int j = i * i; j <= 1e6; j += i){
ciur[j] = 1;
}
}
}
int t;
cin >> t;
while(t--){
int n, nrdiv = 1;
cin >> n;
vector<pf> desc;
for(auto p : primes){
if(p * p > n) break;
int cnt = 0;
while(n % p == 0){
cnt++;
n /= p;
}
nrdiv *= (cnt + 1);
if(cnt)
desc.push_back({p, cnt});
}
if(n > 1){
nrdiv *= 2;
desc.push_back({n, 1});
}
int ans = 1;
for(auto p : desc){
ans *= (binexp(p.d, p.e + 1) - 1);
ans /= (p.d - 1);
}
cout << nrdiv << " " << ans % mod << '\n';
}
return 0;
}