Pagini recente » Istoria paginii utilizator/mirisanu | Monitorul de evaluare | Istoria paginii utilizator/popescu67 | Istoria paginii utilizator/acinstallation412 | Cod sursa (job #2565087)
#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; i+= 2 )
{
if( C[i] == 1 )
for( int j = i*i; j <= NMAX; j += 2*i )
C[j] = 0;
}
P.push_back( 2 );
for( int i = 3; i <= NMAX; 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 ( ans * ans ) % MOD;
else return ( x * ( ans * ans )%MOD )%MOD;
}
int Inv( int x )
{
return Exp( x, MOD - 2 );
}
void DivSum( long long x )
{
if( 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] <= n ; ++i )
{
if( x%P[i] == 0 )
{
while( x % P[i] == 0 )
{
x /= P[i];
k++;
}
ct *= (k+1);
D = (D * (Exp( P[i], k+1 ) - 1 )) % MOD;
D = ( D * Inv( P[i] - 1 ) )%MOD;
//cout << D << ' ';
k = 0;
}
}
if( x!= 1 ) fout << 2 << ' ' << x+1 << '\n';
else 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;
}