Pagini recente » Cod sursa (job #1777195) | Cod sursa (job #1505059) | Cod sursa (job #1205637) | Cod sursa (job #1965074) | Cod sursa (job #2565265)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1000005;
const int MOD = 9973;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int T;
long long x;
bool C[NMAX];
vector < int > P;
void Ciur()
{
C[2] = 1;
for( int i = 3; i <= NMAX-5; i += 2 )
C[i] = 1;
for( int i = 3; i * i <= NMAX-5; i+= 2 )
{
if( C[i] == 1 )
for( int j = 3*i; j <= NMAX-5; j += 2*i )
C[j] = 0;
}
P.push_back( 2 );
for( int i = 3; i <= NMAX-5; i += 2 )
if( C[i] ) P.push_back( i );
}
int Exp( int x, int p )
{
if( p == 0 ) return 1;
int ans = Exp( x, p/2 );
if( p%2 == 0 ) return ( 1LL * ans * ans ) % MOD;
else return ( 1LL * x * ( 1LL * ans * ans )%MOD )%MOD;
}
int Inv( int x )
{
return Exp( x, MOD - 2 );
}
void DivSum( long long x )
{
if( ( x <= NMAX-5 ) && C[x] == 1 )
{
fout << 2 << ' ' << x+1 << '\n';
return;
}
long long ct = 1;
long long D = 1;
int k = 0;
long long n = x;
for( int i = 0; i < P.size() && 1LL*P[i]*P[i] <= x ; ++i )
{
if( ( x <= NMAX-5 ) && C[x] == 1 ) break;
if( x%P[i] == 0 )
{
while( x % P[i] == 0 )
{
x /= P[i];
k++;//cout << x << ' ';
//cout << P[i] << ' ';
}
ct *= (k+1);
//cout << P[i] << ' ' << k << '\n';
int e = (Exp( P[i], k+1 ) - 1 );
if( e < 0 ) e += MOD;
D = (1LL * D * e) % MOD;
//cout << Inv(P[i]-1) << ' ';
D = ( 1LL* D * Inv(P[i]-1) )%MOD;
//cout << D << '\n';
k = 0;
}
}//cout << x << ' ';
if( x > 1 )
{
ct*=2;
D = D*(x+1) % MOD;
}
fout << ct << ' ' << D << '\n';
}
void Solve()
{
Ciur();
fin >> T;
for( int i = 1; i <= T; ++i )
{
fin >> x;
DivSum( x );
}
}
int main()
{
Solve();
return 0;
}