Pagini recente » Cod sursa (job #1489757) | Cod sursa (job #974310) | Istoria paginii runda/speed2 | Cod sursa (job #1963440) | Cod sursa (job #2756468)
#include <iostream>
#include <fstream>
using namespace std;
const int MOD = 9973;
const int NMAX = 1000000;
char ciur[NMAX + 1];
int prime[80000];
void calc_prime() {
int i, j, prim = 0;
ciur[0] = ciur[1] = 1;
for ( i = 2; i * i <= NMAX; i ++ ) {
if ( ciur[i] == 0 ) {
for ( j = i * i; j <= NMAX; j += i )
ciur[j] = 1;
}
}
for ( i = 0; i < NMAX; i ++ ) {
if ( ciur[i] == 0 ) {
prime[prim++] = i;
}
}
}
int lgput( long long a, int b ) {
int p = 1;
while ( b > 0 ) {
if ( b % 2 == 1 ) {
p = (long long)p * a % MOD;
}
a = (long long)a * a % MOD;
b /= 2;
}
return p;
}
void raspuns( int& suma, int& div, long long a ) {
int power, d, prim;
prim = 1;
d = prime[0];
div = 1;
suma = 1;
while ( d * d <= a ) {
power = 0;
while ( a % d == 0 ) {
a /= d;
power ++;
}
div *= ( power + 1 );
if ( power > 0 ) {
suma = (long long)suma * ( lgput( d, power + 1 ) - 1 + MOD ) % MOD * lgput( d - 1, MOD - 2 ) % MOD;
}
suma %= MOD;
d = prime[prim++];
}
if ( a > 1 ) {
div *= 2;
suma = (long long)suma * ( lgput( a % MOD, 2 ) - 1 + MOD ) % MOD * lgput( (a - 1) % MOD, MOD - 2 ) % MOD;;
}
}
int main() {
ifstream fin( "ssnd.in" );
ofstream fout( "ssnd.out" );
int t, i, suma, div;
long long n;
fin >> t;
calc_prime();
for ( i = 0; i < t; i ++ ) {
fin >> n;
suma = div = 1;
raspuns( suma, div, n );
fout << div << ' ' << suma << '\n';
}
return 0;
}