Pagini recente » Cod sursa (job #1027502) | Cod sursa (job #844658) | Cod sursa (job #1449799) | Cod sursa (job #1316438) | Cod sursa (job #3149909)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
const int NMAX = 1000000;
const int MOD = 9973;
bool prim[1000001];
vector<int> ciur;
void eratostene() {
prim[0] = prim[1] = 1;
for(int d = 2; d <= NMAX; d++)
if(!prim[d]) {
for(int j = d * 2; j <= NMAX; j += d)
prim[j] = 1;
ciur.push_back(d);
}
}
int lgPow(int x, int p) {
int v = 1;
while(p > 0) {
if(p & 1)
v = 1LL * v * x % MOD;
x = 1LL * x * x % MOD;
p >>= 1;
}
return v;
}
inline int invMod(int n) {
return lgPow(n, MOD - 2);
}
void desc(long long x) {
long long nr = 1, s = 1;
for(int d : ciur)
if(x % d == 0) {
if(1LL * d * d > x) break;
int p = 0;
while (x % d == 0) {
p++; x /= d;
}
nr *= p + 1;
s = (1LL * s * (lgPow(d, p + 1) - 1) % MOD) * invMod(d - 1) % MOD;
}
if (x > 1) {
nr *= 2;
s = 1LL * s * (x + 1) % MOD;
}
g << nr << ' ' << s << '\n';
}
int main() {
eratostene();
int t; f >> t;
while (t--) {
long long x;
f >> x;
desc(x);
}
return 0;
}