Pagini recente » Cod sursa (job #1861195) | Cod sursa (job #3233933) | Cod sursa (job #2806360) | Cod sursa (job #3273534) | Cod sursa (job #2502599)
#include<bits/stdc++.h>
using namespace std;
FILE * fin = fopen("ssnd.in","r");
FILE * fout = fopen("ssnd.out","w");
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( fscanf( fin, "%d", &T ); T; T-- ){
fscanf( fin, "%lld", &N );
long long save = N, nrd = 1;
int sd = 1;
for( int i = 1; i <= K && 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;
}
fprintf( fout, "%lld %d\n", nrd, sd );
}
return 0;
}