Pagini recente » Cod sursa (job #1972758) | Cod sursa (job #2793898) | Cod sursa (job #665315) | Cod sursa (job #2478267) | Cod sursa (job #1972759)
#include <fstream>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int MOD = 9973;
const int NMAX = 1000005;
int t, n, r1, r2, prim[NMAX], k;
bool ciur[NMAX];
void ciur_er()
{
long long i,j;
for(i=2; i<NMAX; i++)
{
if(!ciur[i])
{
prim[++k]=i;
for(j=i+i; j<=NMAX; j+=i)
ciur[j]=true;
}
}
}
void inv_mod(long long &x, long long &y, int a, int b){
if(!b){
x=1;
y=0;
} else{
inv_mod(x, y, b, a%b);
swap(x, y);
y -= x * (a/b);
}
}
int turn_to_inv(int x){
long long inv = 0, ins;
inv_mod(inv, ins, x, MOD);
inv %= MOD;
if(inv <= 0)
inv = MOD + inv % MOD;
return ((int) inv);
}
int effpower(int x, int y) {
if(x == 0)
return 0;
else if(y == 0)
return 1;
else{
int result = effpower(x, (y >> 1));
if((y & 1) == 0)
return (result * result) % MOD;
else
return (((result * result) % MOD) * x) % MOD;
}
}
// nr div: (d1 + 1)*(d2 + 1)*...*(dk+1)
// sdiv : p^(e+1)-1 /(p -1)
void decompose(int a){
int exp = 0;
if(a%2 == 0) {
while(a%2 == 0) {
a /= 2;
exp++;
}
r1 *= (exp + 1);
int factor = effpower(2, exp + 1) - 1;
if(factor < 0)
factor = MOD + factor % MOD;
r2 = (r2 * factor) % MOD;
}
int j = 2;
while(prim[j] * prim[j]<= a){
exp = 0;
int i = prim[j];
while(a%i == 0){
a /= i;
exp++;
}
if(0 < exp) {
r1 *= (exp + 1);
if((i-1) % MOD == 0) {
r2 = (r2 * (exp+1)) % MOD;
} else {
int factor = effpower(i % MOD, exp + 1) - 1;
if(factor < 0)
factor = MOD + factor % MOD;
r2 = (r2 * factor) % MOD;
r2 = (r2 * turn_to_inv(i - 1)) % MOD;
}
}
j++;
}
if(1 < a) {
r1 *= 2;
if((a - 1) % MOD == 0){
r2 = (r2 * (2)) % MOD;
} else{
int factor = effpower(a, 2) - 1;
if(factor < 0)
factor = MOD + factor % MOD;
r2 = (r2 * factor) % MOD;
r2 = (r2 * turn_to_inv(a - 1)) % MOD;
}
}
}
int main()
{
ciur_er();
in >> t;
for(int i = 1; i <= t; i++){
in >> n;
r1=r2=1;
decompose(n);
out << r1 << ' ' << r2 << '\n';
}
return 0;
}