Pagini recente » Cod sursa (job #1263609) | Cod sursa (job #1108098) | Cod sursa (job #264589) | Cod sursa (job #491524) | Cod sursa (job #1267444)
#include <stdio.h>
#define NEPRIM 1
#define PRIM 0
#define MAXN 1000000
typedef struct divs {
int p;
int a;
}num;
num v[1000];
char chur[1000000];
int putereLOG ( int baz, int exp ) {
int rez = 1;
while ( exp > 0 ) rez *= baz, exp --;
return rez;
}
void ciur ( long long n ) {
int i, j; chur[0] = chur[1] = NEPRIM;
for ( i = 2; i * i <= n; i ++ )
if ( chur[i] == PRIM )
for ( j = i + i; j <= n; j += i )
chur[j] = NEPRIM;
}
int dfp ( long long n ) {
int d = 2, div, i = 0;
while ( n > 1 && d * d <= n ) {
div = 0;
while ( n % d == 0 ) {
div ++;
n /= d;
}
if ( div > 0 ) {
v[i].p = d;
v[i].a = div;
i ++;
}
d ++;
while ( n > 1 && chur[d] == NEPRIM && d * d <= n )
d ++;
}
if ( n > 1 ) {
v[i].p = n;
v[i].a = 1;
i ++;
}
return i;
}
int main () {
FILE *f, *g;
f = fopen( "ssnd.in", "r" );
g = fopen( "ssnd.out", "w" );
int t;
fscanf( f, "%d", &t);
ciur ( MAXN );
int i, j, prod, var;
long long n;
for ( i = 0; i < t; i++ ) {
fscanf( f, "%lld", &n );
var = dfp ( n );
for ( j = 0, prod = 1; j < var; j++ )
prod *= ( v[j].a + 1 );
fprintf( g, "%d ", prod );
for ( j = 0, prod = 1; j < var; j++ )
prod *= ( ( putereLOG( v[j].p, v[j].a + 1 ) - 1 ) / ( v[j].p - 1 ) % 9973 );
fprintf( g, "%d\n", prod );
}
fclose ( f );
fclose ( g );
return 0;
}