Pagini recente » Cod sursa (job #828496) | Cod sursa (job #19264) | Cod sursa (job #2675115) | Cod sursa (job #275526) | Cod sursa (job #2502605)
#include<fstream>
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], P[DIM / 10 + 5], K;
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(){
K = 0;
w[0] = w[1] = 1;
for( int i = 1; i <= DIM; i++ ){
if( w[i] == 0 ){
P[++K] = i;
for( int j = i + i; j <= DIM; j += i )
w[j] = 1;
}
}
for( int i = 1; i <= K; i++ )
invM[ P[i] ] = lgput( P[i] - 1, MOD - 2 );
for( fin >> T; T; T-- ){
fin >> N;
int nrd = 1;
int sd = 1;
for( int i = 1; i <= K && 1LL * P[i] * P[i] <= N; 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;
}