Pagini recente » Cod sursa (job #2515593) | Cod sursa (job #909702) | Cod sursa (job #532190) | Cod sursa (job #747220) | Cod sursa (job #2724222)
#include <fstream>
#include <iostream>
#define P2 16384
#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 + 2];
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;
a %= MOD;
while ( b ) {
if ( b % 2 == 1 ) {
ans *= a;
ans %= MOD;
}
a *= a;
a %= MOD;
b /= 2;
}
return ans;
}
int sumSiNr( long long n ) {
int put, nr = 1, poz = 1, sum = 1, p1, p2;
while ( 1LL * prime[poz] * prime[poz] <= n ) {
put = 0;
while ( n % prime[poz] == 0 ) {
put ++;
n /= prime[poz];
}
nr *= ( put + 1 );
p1 = ( putAB( prime[poz], put + 1 ) - 1 ) % MOD;
p2 = putAB( prime[poz] - 1, MOD - 2 ) % MOD;
sum = ( ( ( sum * p1 ) % MOD ) * p2 ) % MOD;
poz ++;
}
if ( n > 1 ) {
nr *= 2;
sum = ( 1LL * sum * ( n + 1 ) ) % MOD;
}
return nr * P2 + sum;
}
int main() {
ciurMake( N );
primeMake( N );
prime[NP + 1] = 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;
}