Pagini recente » Rating Alexandru Ariton (Andueboss) | Rating FMI - Cristina Andrei (newbie) | Cod sursa (job #2875343) | Cod sursa (job #1055356) | Cod sursa (job #462549)
Cod sursa(job #462549)
#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 void gcd( int a, int b, int& X, int Y )
{
if( 0 == b )
{
X=1;
Y=0;
return;
}
int x0, y0;
gcd( b, a%b, x0, y0 );
X=y0;
Y=x0-(a/b)*y0;
}
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, nr, s, i, j, p;
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, p=1; 0 == A%PrimeNr[i]; A/=PrimeNr[i], ++j )
p=(1LL*p*PrimeNr[i])%Modulo;
p=(1LL*p*PrimeNr[i])%Modulo;
nr=(1LL*nr*(j+1) )%Modulo;
s=( 1LL*s*( p-1 )/( PrimeNr[i]-1 ) )%Modulo;
}
if( A > 1 )
nr=(2*nr)%Modulo, s=( 1LL*s*(A+1) )%Modulo;
out<<nr<<' '<<s<<'\n';
}
return EXIT_SUCCESS;
}