Pagini recente » Cod sursa (job #2888041) | Cod sursa (job #759467) | Cod sursa (job #2691085) | Cod sursa (job #1191732) | Cod sursa (job #2565116)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "ssnd.in" );
ofstream fout( "ssnd.out" );
const int MOD = 9973;
const int SQ = 1000004;
int t;
long long N;
int fact[MOD + 5];
vector <int> prime;
bool p[SQ + 5];
void Pre() {
fact[0] = 1;
for( int i = 1; i < MOD; ++i )
fact[i] = ( 1LL * fact[i - 1] * i ) % MOD;
for( int i = 3; i <= SQ; i += 2 )
p[i] = true;
for( int i = 3; i * i <= SQ; i += 2 )
if( p[i] )
for( int j = 3; i * j <= SQ; j += 2 )
p[i * j] = false;
prime.push_back( 2 );
for( int i = 3; i <= SQ; i += 2 )
if( p[i] ) prime.push_back( i );
}
void Do();
void Read()
{
fin >> t;
for( int i = 1; i <= t; ++i ) {
fin >> N;
Do();
}
}
int Exp( int v, int p ) {
if( p == 1 ) return v;
int ans = Exp( v, p / 2 );
ans = ( 1LL * ans * ans ) % MOD;
if( p % 2 ) ans = ( 1LL * ans * v ) % MOD;
return ans;
}
int InvMod( int val ) {
return Exp( val, MOD - 2 );
}
void Do()
{
if( N <= SQ && p[N] ) { fout << 2 << ' ' << N + 1 << '\n'; return; }
int nrdiv = 1, sumdiv = 1;
int aux = N;
for( int i = 0; i < prime.size() && 1LL * prime[i] * prime[i] <= aux; ++i ) {
int ex = 0;
while( N % prime[i] == 0 ) {
++ex;
N /= prime[i];
}
long long prod = Exp( prime[i], ex + 1 ) - 1;
if( prod < 0 ) prod += MOD;
prod = ( 1LL * prod * InvMod( prime[i] - 1 ) ) % MOD;
nrdiv *= ( ex + 1 );
sumdiv = ( 1LL * sumdiv * prod ) % MOD;
}
if( N > 1 ) {
++nrdiv;
long long prod = Exp( N, 2 ) - 1;
if( prod < 0 ) prod += MOD;
prod = ( 1LL * prod * InvMod( N - 1 ) ) % MOD;
sumdiv = ( 1LL * sumdiv * prod ) % MOD;
}
fout << nrdiv << ' ' << sumdiv << '\n';
}
int main()
{
Pre();
Read();
return 0;
}