Pagini recente » Cod sursa (job #1975334) | Cod sursa (job #3193326) | Cod sursa (job #2884610) | Cod sursa (job #2696325) | Cod sursa (job #2515915)
#include <stdio.h>
#define MOD 9973
#define MAX 1000000
#define MAXP 78499
char ciur[MAX + 1];
int p[MAXP];
int explg( int a, int n ) {
int pow;
pow = 1;
while ( n > 0 ) {
if ( n&1 ) {
pow = (pow * a) % MOD;
}
a = (a * a) % MOD;
n >>= 1;
}
return pow;
}
int main() {
FILE *fin = fopen( "ssnd.in", "r" );
FILE *fout = fopen( "ssnd.out", "w" );
int q, i, exp, k, d, nrd, expc, maxk, pow, invmod;
long long S, n;
k = 0;
for ( d = 2; d * d <= MAX; ++d ) {
if ( ciur[d] == 0 ) {
p[k++] = d;
for ( i = d * d; i <= MAX; i += d ) {
ciur[i] = 1;
}
}
}
for ( ; d <= MAX; ++d) {
if (ciur[d] == 0) {
p[k++] = d;
}
}
maxk = k;
fscanf( fin, "%d", &q );
for ( i = 0; i < q; ++i ) {
fscanf( fin, "%lld", &n );
nrd = 1;
S = 1;
k = 0;
while ( 1LL * p[k] * p[k] <= n) {
exp = 0;
while ( n % p[k] == 0 ) {
++exp;
n /= p[k];
}
if (exp > 0) {
++exp;
pow = explg( p[k] % MOD, exp );
invmod = explg( (p[k] - 1) % MOD, MOD - 2 );
S = (S * ((pow - 1 + MOD) * invmod)) % MOD;
nrd *= exp;
}
++k;
}
if ( n > 1 ) {
nrd *= 2;
invmod = explg( (n - 1) % MOD, MOD - 2 );
S = (S * ((n * n - 1) * invmod)) % MOD;
}
fprintf( fout, "%d %lld\n", nrd, S );
}
fclose( fin );
fclose( fout );
return 0;
}