Pagini recente » Cod sursa (job #753800) | Cod sursa (job #1001297) | Cod sursa (job #1687418) | Cod sursa (job #2972979) | Cod sursa (job #2277048)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int MOD = 9973;
const int N = 1000005;
bool ciur[N];
void eratostene(){
for(int d = 2; d <= N; d++){
if(!ciur[d])
for(long long i = 2 * d; i <= N; i += d)
ciur[i] = 1;
}
}
pair <long long, long long> euclid(long long x, long long y){
if(y == 0)
return {1, 0};
auto p = euclid(y, x % y);
return {p.second, p.first - (x / y) * p.second};
}
long long inverModular(long long x){
auto rez = euclid(x, MOD);
return rez.first;
}
long long t;
long long putere(long long x, long long y){
long long rez = 1;
while (y){
if(y & 1){
rez = (1LL * rez *x) % MOD;
}
x = (1LL * x * x) % MOD;
y >>= 1;
}
return rez;
}
long long suma = 1;
long long nrDiv = 1;
void Suma_nrDiv(long long x){
long long p = 0;
while(x % 2 == 0){
x/=2;
p++;
}
if(p != 0){
nrDiv *= (p + 1);
suma = (suma * (((putere(2, p + 1) - 1) * inverModular(1)) % MOD)) % MOD;
p = 0;
}
for(long long d = 3; d * d < x; d += 2){
if(ciur[d] == 0)
if(x % d == 0){
while (x % d == 0){
x/=d;
p++;
}
nrDiv *= (p + 1);
long long inv = inverModular(d - 1);
while (inv < 0)
inv += MOD;
long long put = putere(d, p + 1);
if (inv != 0)
suma = (suma * (((put - 1) * inv) % MOD)) % MOD;
else
suma = (suma * (p + 1)) % MOD;
}
}
if(x > 1){
nrDiv *= 2;
long long inv = inverModular(x - 1);
while (inv < 0)
inv += MOD;
long long put = putere(x, 2);
if (inv != 0)
suma = (suma * (((put - 1) * inv) % MOD)) % MOD;
else
suma = suma * 2 % MOD;
}
}
int main() {
ios::sync_with_stdio(false);
eratostene();
in >> t;
for(long long i = 0; i < t; i++){
suma = 1;
nrDiv = 1;
long long n;
in >> n;
Suma_nrDiv(n);
out << nrDiv << " " << suma << "\n";
}
return 0;
}