Pagini recente » Cod sursa (job #571704) | Cod sursa (job #2377577) | Cod sursa (job #2654823) | Cod sursa (job #1564807) | Cod sursa (job #2529007)
#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;
}
}
}
void raspuns( int *suma, int *div, long long a ) {
int power, d, prim;
long long prod;
prim = 1;
d = prime[0];
while ( d * d <= a ) {
power = 0;
prod = 1;
while ( a % d == 0 ) {
prod *= d;
a /= d;
power ++;
}
*div *= ( power + 1 );
if ( prod != 1 ) {
*suma *= ( prod * d - 1 ) / ( d - 1 ) % MOD;
}
*suma %= MOD;
d = prime[prim++];
}
if ( a > 1 ) {
*div *= 2;
*suma *= ( a * a - 1 ) / ( a - 1 ) % MOD;
*suma %= 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;
}