Pagini recente » Cod sursa (job #2287038) | Cod sursa (job #1397198) | Cod sursa (job #2984875) | Cod sursa (job #1440453) | Cod sursa (job #2338682)
#include <bits/stdc++.h>
#define pb push_back
#define MOD 9973
using namespace std ;
const int NR = 1000005 ;
ifstream in ("ssnd.in") ;
ofstream out ("ssnd.out") ;
bitset < NR > v ;
vector < int64_t > primes ;
int64_t lgpow ( int64_t x , int64_t y )
{
if ( y == 1 ) return x ;
if ( y % 2 ) return ( x * lgpow( ( x * x ) % MOD , y >> 1 ) ) % MOD ;
else return lgpow ( ( x * x ) % MOD , y >> 1 ) ;
}
void ciur ()
{
primes .pb ( 2 ) ;
for( int i = 4 ; i <= NR ; i += 2 ) v [ i ] = 1 ;
for ( int i = 3 ; i <= NR ; ++ i )
{
if ( !v [ i ] )
{
primes .pb ( i ) ;
for ( int j = i * 3 ; j <= NR ; j += 2 * i )
v [ j ] = 1 ;
}
}
}
void work ( int64_t n , int64_t & sum , int64_t & nr )
{
int64_t i = 0 , nrdiv = 1 , cnt = 1 , divpow = 1 , sumup = 1 , sumdown = 1 ;
while ( n != 1 )
{
cnt = 1 ;
divpow = 1 ;
while ( !( n % primes [ i ] ) ) ++ cnt , n /= primes [ i ] , divpow *= primes [ i ] ;
if ( cnt != 1 )
sumup = sumup * ( ( divpow * primes [ i ] - 1 ) % MOD ) % MOD , sumdown = sumdown * ( primes [ i ] - 1 ) % MOD ;
nrdiv = nrdiv * cnt % MOD ;
++ i ;
}
nr = nrdiv ;
sum = sumup * lgpow ( sumdown , MOD - 2 ) % MOD ;
}
int main ()
{
ciur() ;
int q ; in >> q ;
while ( q -- )
{
int64_t n , sum , nr ; in >> n ;
work ( n , sum , nr ) ;
out << nr << ' ' << sum << '\n' ;
}
return 0 ;
}