Pagini recente » Cod sursa (job #3215843) | Cod sursa (job #2683392) | Cowfood | Rating Marinescu Robert (roberttbh) | Cod sursa (job #462556)
Cod sursa(job #462556)
#include <vector>
#include <cstdlib>
#include <fstream>
#define MAX_N 1000003
#define Modulo 9973
/*
*
*/
using namespace std;
typedef pair< int, int > pr;
char isPrime[MAX_N];
vector< int > PrimeNr;
inline int pow( int p, int k )
{
int r;
for( r=1; k; k>>=1 )
{
if( k&1 )
{
r=(1LL*r*p)%Modulo;
--k;
}
p=(1LL*p*p)%Modulo;
}
return r;
}
void SieveE( void )
{
int i, j, pas;
for( i=1; ((i*i)<<1)+(i<<1) < MAX_N; ++i )
if( 0 == ( isPrime[i>>3] & (1<<(i&7)) ) )
{
pas=(i<<1)+1;
for( j=((i*i)<<1)+(i<<1); j<<1 < MAX_N; j+=pas )
isPrime[j>>3]|=1<<(j&7);
}
PrimeNr.push_back(2);
for( i=3; i <= MAX_N; i+=2 )
{
j=(i-1)>>1;
if( 0 == ( isPrime[j>>3] & (1<<(j&7)) ) )
PrimeNr.push_back(i);
}
}
int main( void )
{
long long int A;
int T, i, j, nr, s;
SieveE();
ifstream in( "ssnd.in" );
ofstream out( "ssnd.out" );
for( in>>T; T; --T )
{
in>>A;
if( A <= MAX_N && A%2 && A%3 && A%5 && A%7 )
{
i=(A-1)>>1;
if( 0 == ( isPrime[i>>3] & (1<<(i&7)) ) )
{
out<<"2 "<<(A+1)<<'\n';
continue;
}
}
nr=s=1;
for( i=0; 1LL*PrimeNr[i]*PrimeNr[i] <= A; ++i )
if( 0 == A%PrimeNr[i] )
{
for( j=0; 0 == A%PrimeNr[i]; A/=PrimeNr[i], ++j );
nr=(1LL*nr*(j+1) )%Modulo;
s=( 1LL*s*( pow( PrimeNr[i], j+1 )-1 )*pow( PrimeNr[i]-1, Modulo-2 ) )%Modulo;
}
if( A > 1 )
nr=(2*nr)%Modulo, s=( 1LL*s*(A+1) )%Modulo;
out<<nr<<' '<<s<<'\n';
}
return EXIT_SUCCESS;
}