Pagini recente » Cod sursa (job #1224527) | Cod sursa (job #1230816) | Cod sursa (job #338870) | Cod sursa (job #1853228) | Cod sursa (job #1335052)
#include <fstream>
#include <vector>
#define Nmax 1000100
#define mod 9973
using namespace std;
int top, Prime[Nmax >> 1];
bool seen[Nmax];
int Exp(int base, int power) {
int result = 1;
for(; power > 0; power >>= 1) {
if(power & 1)
result = (result * base) % mod;
base = (base * base) % mod;
}
return result;
}
void Solve(long long X, int & Sum, int & Div) {
int i, power;
Sum = 1;
Div = 1;
for(i = 1; i <= top && 1LL * Prime[i] * Prime[i] <= X; i++)
if(X % Prime[i] == 0) {
for(power = 0; X % Prime[i] == 0; power++, X /= Prime[i]);
Div = Div * (power + 1);
Sum = (Sum * (Exp(Prime[i], power + 1) - 1)) % mod;
Sum = (Sum * Exp(Prime[i] - 1, mod - 2)) % mod;
}
if(X > 1) {
Div <<= 1;
Sum = (Sum * (X + 1)) % mod;
}
}
void Sieve() {
int i, j;
Prime[++top] = 2;
for(i = 3; i < Nmax; i += 2)
if(!seen[i]) {
Prime[++top] = i;
if(j < 2000)
for(j = i * i; j < Nmax; j += (i << 1))
seen[j] = true;
}
}
int main() {
int sum, div, queries;
long long x;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
Sieve();
in >> queries;
while(queries--) {
in >> x;
Solve(x, sum, div);
out << div << ' ' << sum << '\n';
}
in.close();
out.close();
return 0;
}