Pagini recente » Monitorul de evaluare | Cod sursa (job #2074097) | Cod sursa (job #2222066) | Rating Petre Bogdan (PetreBogdan55) | Cod sursa (job #872568)
Cod sursa(job #872568)
#include<stdio.h>
#include<math.h>
#include<string.h>
#define MOD 9973
long t , a [ 100007 ] , put [ 100007 ] ;
long long n;
bool ap[ 1000007 ];
void ciur ( long n )
{
a [ ++ a [ 0 ] ] = 2 ;
for ( int i=4 ; i<=n ; i += 2)
ap [ i ] = 1;
for ( int i=3 ; i<=n ; i += 2)
{
if ( ap [ i ] == 0 )
{
a [ ++ a [ 0 ] ] = i ;
for ( int j=i*2 ; j<=n ; j += i)
ap [ j ] = 1;
}
}
}
void desc ( long long n )
{
int d , nr = 0;
for ( int i=1 ; i<=a [ 0 ] && n != 1 && a [ i ] <= sqrt ( n ) ; ++i )
{
nr=0;
while ( n%a [ i ] == 0)
n /= a [ i ] , ++nr;
put [ i ] = nr ;
}
if ( n != 1 )
for ( int i=1 ; i<=a [ 0 ] ; ++i )
if ( a [ i ] == n )
{
put [ i ] = 1;
break;
}
}
int main ( )
{
long long nrdiv , prod , prod2 , s ;
freopen ( "ssnd.in" , "r" , stdin ) ;
freopen ( "ssnd.out" , "w" , stdout ) ;
scanf ( "%d" , &t ) ;
ciur ( 1000000 ) ;
for ( int i=1 ; i<=t ; ++i )
{
scanf( "%lld" , &n );
memset ( put , 0 , sizeof ( put ) ) ;
desc ( n ) ;
nrdiv = 1;
prod2 = 1;
for( int i=1 ; i<=a [ 0 ] ; ++i )
{
if ( put [ i ] != 0 )
{
prod = 1 ;
nrdiv = nrdiv * (put [ i ] + 1);
s = 0 ;
for ( int j=0 ; j<= put [ i ] ; ++j )
{
s = (s + prod) % MOD ;
prod *= a [ i ] ;
}
prod2 = (prod2 * s) % MOD ;
}
}
printf("%lld %lld\n" , nrdiv , prod2);
}
return 0 ;
}