Pagini recente » Cod sursa (job #64257) | Cod sursa (job #2359319) | Cod sursa (job #2688851) | Cod sursa (job #1419835) | Cod sursa (job #1955889)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
const int NCIUR = 1e6 + 5 ;
const int NRPRIMES = 1e5 ;
const int MOD = 9973 ;
long long nrDiv = 1 , sumTot = 1 ;
int viz [ NCIUR ] ;
int primes [ NRPRIMES ] , prcr ;
int CalcFastExp ( int x , int power ){
static int temp ;
if ( power == 1 ){
return x % MOD ;
}
temp = CalcFastExp( x , power/2 );
if ( power % 2 ){
return ( 1LL * temp * temp * x ) % MOD ;
}else{
return ( temp * temp ) % MOD ;
}
}
void Solve ( long long x ){
static int i , power ;
nrDiv = 1 ;
sumTot = 1 ;
for ( i = 0 ; 1LL * primes [ i ] * primes [ i ] <= x && i < prcr ; i++){
power = 0 ;
while ( x % primes [ i ] == 0 ){
x/= primes [ i ] ;
power ++ ;
}
if ( power ){
nrDiv = ( nrDiv * ( power + 1 ) )% MOD ;
sumTot = sumTot * ( CalcFastExp ( primes [ i ] , power + 1 ) - 1 ) * CalcFastExp( primes [ i ] - 1 , MOD - 2 ) ;
sumTot %= MOD ;
}
}
if ( x != 1 ){
nrDiv = ( nrDiv * 2 )% MOD ;
sumTot = ( 1LL * sumTot * (x + 1) ) % MOD ;
}
printf("%lld %lld\n",nrDiv , sumTot );
}
int main(){
int noTest;
int i , j ;
long long x ;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
for ( i = 2 ; i < NCIUR ; i++ ){
if ( viz [ i ] ){
continue ;
}
primes [ prcr ++]= i ;
if ( 1LL * i * i >= NCIUR ){
continue ;
}
for ( j = i * i ; j < NCIUR ; j+=i ){
viz [ j ] = 1;
}
}
scanf("%d",&noTest );
while ( noTest-- ){
scanf("%lld",&x);
Solve ( x );
}
return 0;
}