Pagini recente » Cod sursa (job #2235788) | Cod sursa (job #866462) | Cod sursa (job #51847) | Cod sursa (job #1226477) | Cod sursa (job #2502590)
#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;
vector< pair<int,int> > arr;
inline int lgput( int x, int p ){
int r = 1;
x %= MOD;
while( p > 0 ){
if( (p & 1) == 1 )
r = (r * x) % 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;
for( int i = 0; i < P.size() && 1LL * P[i] * P[i] <= save && N != 1; i++ ){
int e = 0;
while( N % P[i] == 0 ){
e++;
N /= P[i];
}
if( e != 0 )
arr.push_back( { P[i], e } );
}
int nrd;
if( N == 1 )
nrd = 1;
else
nrd = 2;
for( int i = 0; i < arr.size(); i++ )
nrd = ( nrd * ( arr[i].second + 1 ) ) % MOD;
int sd;
if( N == 1 )
sd = 1;
else
sd = ( ( (N * N) % MOD - 1 + MOD ) * lgput( N - 1, MOD - 2 ) ) % MOD;
for( int i = 0; i < arr.size(); i++ ){
int aux = lgput( arr[i].first, arr[i].second + 1 ) - 1 + MOD;
if( aux >= MOD ) aux -= MOD;
aux = ( aux * invM[ arr[i].first ] ) % MOD;
sd = ( sd * aux ) % MOD;
}
fout << nrd << " " << sd << "\n";
arr.clear();
}
return 0;
}