Pagini recente » Cod sursa (job #277934) | Cod sursa (job #2291293) | Cod sursa (job #515173) | Cod sursa (job #2401780) | Cod sursa (job #1125879)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
const long long MOD = 9973;
const long long Nmax = 1000000;
long long P;
bitset <Nmax> ciur;
long long Primes[80000];
void gen()
{
for ( long long i = 2; i < Nmax; i++ )
ciur[i] = 1;
for ( long long i = 4; i < Nmax; i += 2 )
ciur[i] = 0;
Primes[ ++P ] = 2;
for ( long long i = 3; i < Nmax; i += 2 )
if ( ciur[i] )
{
Primes[ ++P] = i;
for ( long long j = 3 * i; j < Nmax; j += 2 * i )
ciur[j] = 0;
}
}
long long pw( long long a, long long p )
{
long long res = 1;
for ( long long i = 0; ( 1LL << i ) <= p; ++i )
{
if ( p & ( 1LL << i ) )
res = ( res * a ) % MOD;
a = ( a * a ) % MOD;
}
return res;
}
long long inv( long long a )
{
return pw( a, MOD - 2 );
}
void solve( long long n, ostream &f )
{
long long nr_div = 1;
long long sum_div = 1;
for ( long long i = 1; i <= P && Primes[i] * Primes[i] <= n; ++i )
{
if ( n % Primes[i] ) continue;
long long e = 0;
while ( n % Primes[i] == 0 )
{
e++;
n /= Primes[i];
}
nr_div = ( nr_div * ( e + 1 ) ) % MOD;
sum_div = ( ( sum_div * ( pw( Primes[i], e + 1 ) - 1 + MOD ) % MOD ) * inv( Primes[i] - 1 ) % MOD ) % MOD;
}
if ( n > 1 )
{
nr_div = ( nr_div * 2 ) % MOD;
sum_div = ( ( sum_div * ( pw( n, 2 ) - 1 + MOD ) % MOD ) * inv( n - 1 ) % MOD ) % MOD;
}
f << nr_div << " " << sum_div << "\n";
}
long long N;
long long T;
int main()
{
gen();
ifstream f("ssnd.in");
ofstream g("ssnd.out");
f >> T;
while ( T-- )
{
f >> N;
solve( N, g );
}
return 0;
}