Pagini recente » Cod sursa (job #1464336) | Cod sursa (job #2503015) | Cod sursa (job #1626422) | Cod sursa (job #2386260) | Cod sursa (job #2722720)
#include <fstream>
#define P2 16
#define MOD 9973
#define N 1000000
#define NP 499502
using namespace std;
ifstream fin( "ssnd.in" );
ofstream fout( "ssnd.out" );
char ciur[N + 1];
int prime[NP + 1];
int np = 1;
void ciurMake( long long n ) {
for ( int i = 4; i <= n; i += 2 ) {
ciur[i] = 1;
}
for ( int i = 3; i * i <= n; i += 2 ) {
if ( !ciur[i] ) {
for ( int d = i * i; d <= n; d += i ) {
ciur[d] = 1;
}
}
}
}
void primeMake( int n ) {
prime[np ++] = 2;
for ( int i = 3; i <= n; i += 2 ) {
if ( !ciur[i] ) {
prime[np ++] = i;
}
}
}
int putAB( int a, int b ) {
int ans = 1;
while ( b ) {
if ( b % 2 == 1 )
ans = ( ans * a ) % MOD;
a = ( a * a ) % MOD;
b /= 2;
}
return ans;
}
int sumSiNr( long long n ) {
int put, nr = 1, sum = 1, poz = 1;
while ( prime[poz] * prime[poz] <= n ) {
put = 0;
while ( n % prime[poz] == 0 ) {
put ++;
n /= prime[poz];
}
nr *= ( put + 1 );
if ( put >= 1 )
sum *= ( ( putAB( prime[poz], put + 1 ) - 1 ) / ( prime[poz] - 1 ) ) % MOD;
poz ++;
}
if ( n > 1 ) {
nr *= 2;
sum *= ( ( n * n - 1 ) / ( n - 1 ) ) % MOD;
}
return sum * P2 + nr;
}
int main() {
ciurMake( N );
primeMake( N );
int n, ans;
long long nr;
fin >> n;
for ( int i = 1; i <= n; i ++ ) {
fin >> nr;
ans = sumSiNr( nr );
fout << ans % P2 << " " << ans / P2 << "\n";
}
return 0;
}