Pagini recente » Cod sursa (job #629543) | Cod sursa (job #1732380) | Cod sursa (job #2451238) | Cod sursa (job #3209953) | Cod sursa (job #2565253)
#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;
vector <int> prime;
bool p[SQ + 5];
void Pre() {
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()
{
//ios::sync_with_stdio(false);
cin.tie(0);
fin >> t;
for( int i = 1; i <= t; ++i ) {
fin >> N;
Do();
}
}
int Exp( int v, int p ) {
if( p == 1 ) return ( v % MOD );
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; }
long long nrdiv = 1, sumdiv = 1;
long long aux = N;
for( int i = 0; i < prime.size() && prime[i] * prime[i] <= N; ++i ) {
int ex = 0;
while( N % prime[i] == 0 ) {
++ex;
N /= prime[i];
}
if( ex > 0 ) {
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 *= 2;
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;
}