Pagini recente » Cod sursa (job #499207) | Cod sursa (job #510727) | Cod sursa (job #1980881) | Cod sursa (job #103131) | Cod sursa (job #2502595)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int DIM = 1e6;
const int MOD = 9973;
int T;
bool w[DIM + 5];
long long N;
int invM[DIM];
vector<int> P;
inline int lgput( int x, int p ){
int r = 1;
x %= MOD;
while( p > 0 ){
if( (p & 1) == 1 ){
r *= x;
r %= MOD;
}
x *= x;
x %= MOD;
p >>= 1;
}
return r;
}
int main(){
w[0] = w[1] = 1;
for( int i = 1; i <= DIM; i++ ){
if( w[i] == 0 ){
P.push_back( i );
for( int j = i + i; j <= DIM; j += i )
w[j] = 1;
}
}
for( int i = 0; i < P.size(); i++ )
invM[ P[i] ] = lgput( P[i] - 1, MOD - 2 );
for( fin >> T; T; T-- ){
fin >> N;
long long save = N, nrd = 1;
int sd = 1;
for( int i = 0; i < P.size() && 1LL * P[i] * P[i] <= save && N != 1; i++ ){
if( N % P[i] != 0 )
continue;
int e = 0;
while( N % P[i] == 0 ){
e++;
N /= P[i];
}
if( e == 0 )
continue;
nrd *= (e + 1);
int aux = lgput( P[i], e + 1 ) - 1 + MOD;
if( aux >= MOD ) aux -= MOD;
sd = ( ( ( sd * aux ) % MOD ) * invM[ P[i] ] ) % MOD;
}
if( N != 1 ){
nrd = 2 * nrd;
sd = ( 1LL * sd * (N + 1) ) % MOD;
}
fout << nrd << " " << sd << "\n";
}
return 0;
}