Pagini recente » Cod sursa (job #2913863) | Cod sursa (job #1436464) | Cod sursa (job #2255672) | Cod sursa (job #1269675) | Cod sursa (job #1059595)
#include <cstdio>
#include<iostream>
using namespace std;
#define REST 9973
#define MILION 1000001
bool ciur[MILION];
int nprime[500001], nr;
inline int invers_mod( int n, int r ) {
if( r == 0 )
return 1;
if( n == 0 )
return 0;
if( r % 2 == 0 )
return invers_mod( ( n * n ) % REST, r / 2 ) % REST;
return ( n * invers_mod( n, r - 1 ) % REST ) % REST;
}
void ciur_vector( ) {
int p = 1001;
for( int i = 2 ; i <= p ; ++i )
for( int j = i ; j * i <= MILION ; ++j )
ciur[j*i] = 1;
for( int i = 2 ; i <= MILION ; ++i )
if( ciur[i] == 0 )
nprime[nr++] = i;
}
int main () {
freopen( "ssnd.in", "r", stdin );
freopen( "ssnd.out", "w", stdout );
int t, put, d;
unsigned long long n, nrd, sd, numar;
cin>>t;
ciur_vector();
for( int z = 0 ; z < t ; ++z ) {
cin>>n;
nrd = 1;
sd = 1;
d = 0;
while( nprime[d] * nprime[d] <= n ) {
numar = 1;
put = 0;
while( n % nprime[d] == 0 ) {
++put;
numar *= nprime[d];
//cout<<nprime[d]<<" "<<d<<" "<<n<<endl;
n /= nprime[d];
}
if( put ) {
nrd = ( nrd * ( put + 1 ) ) % REST;
sd = ( (sd *( ( ( numar * nprime[d] ) %REST ) + REST - 1 ) * invers_mod( (nprime[d] - 1) % REST, REST-2 ) ) ) % REST; //numar: nprime[d]^a ; put:a nprime[d] : p
}
++d;
}
if( n > 1 ) {
nrd *= 2;
nrd %= REST;
sd *= ( ( ( ( n * n) % REST ) - 1 ) * invers_mod( (n - 1) % REST, REST-2) );
sd %= REST;
}
cout<<nrd<<" "<<sd<<endl;
}
return 0;
}