Pagini recente » Rating Vasiu Alex (Alexz99) | Cod sursa (job #276625) | Cod sursa (job #2227404)
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
#define NRMAX 80000
#define MOD 9973
int putere( int a, int n ) {
int p = 1;
a %= MOD;
while ( n ) {
if ( n & 1 ) {
p *= a;
p %= MOD;
}
a *= a;
a %= MOD;
n >>= 1;
}
return p;
}
char ciur[MAX + 1];
int prime[NRMAX], nr;
int main() {
FILE *fin, *fout;
fin = fopen( "ssnd.in", "r" );
fout = fopen( "ssnd.out", "w" );
int d, i, t, p;
ciur[1] = 1;
for ( d = 2; d * d <= MAX; d++ )
if ( ciur[d] == 0 )
for ( i = d * d; i <= MAX; i += d )
ciur[i] = 1;
for ( i = 2; i < MAX; i++ )
if ( ciur[i] == 0 )
prime[nr++] = i;
fscanf( fin, "%d", &t );
long long n, nrdiv;
int suma;
for ( int k = 1; k <= t; k++ ) {
if ( k == 62 )
printf( "da " );
fscanf( fin, "%lld", &n );
i = 0;
nrdiv = 1;
suma = 1;
while ( 1LL * prime[i] * prime[i] <= n && i < nr ) {
p = 0;
if ( n % prime[i] == 0 ) {
while ( n % prime[i] == 0 ) {
p++;
n /= prime[i];
}
nrdiv *= p + 1LL;
int a = ( putere( prime[i], p + 1 ) - 1 + MOD ) % MOD;
int b = putere( prime[i] - 1, MOD - 2 ) % MOD;
suma = ( 1LL * suma * a * b ) % MOD;
}
i++;
}
if ( n != 1 ) {
nrdiv *= 2;
suma = ( 1LL * suma * ( n + 1 ) ) % MOD;
}
fprintf( fout, "%lld %d\n", nrdiv, suma );
}
fclose( fin );
fclose( fout );
return 0;
}