Pagini recente » Cod sursa (job #3288120) | Cod sursa (job #2730206) | Cod sursa (job #41336) | Cod sursa (job #2968947) | Cod sursa (job #405501)
Cod sursa(job #405501)
#include <vector>
#include <fstream>
#include <cstdlib>
#define Modulo 9973
#define Nmax 100000
/*
*
*/
using namespace std;
typedef long long int lld;
char is_prime[Nmax/16+1];
vector< unsigned int > PrimeNr;
void Sieve_of_Eratosthenes( void )
{
unsigned int i, j;
for( i=1; ((i*i)<<1)+(i<<1) <= Nmax; ++i )
if( 0 == ( is_prime[i>>3]&(1<<(i&7)) ) )
for( j=((i*i)<<1)+(i<<1); (j<<1)+1 <= Nmax; j+=(i<<1)+1 )
is_prime[j>>3]|=(1<<(j&7));
PrimeNr.push_back(2);
for( i=3; (i<<1)+1 <= Nmax; ++i )
{
j=(i-1)/2;
if( 0 == ( is_prime[j>>3]&(1<<(j&7)) ) )
PrimeNr.push_back( i );
}
}
inline lld pow( lld x, lld n ) //x^n
{
lld r=1;
for( ; n; n>>=1 )
{
if( n&1 )
r=(r*x)%Modulo;
x=(x*x)%Modulo;
}
return r;
}
int main( void )
{
const lld N=PrimeNr.size();
lld t, n, i, j, s, nr;
ifstream in( "ssnd.in" );
ofstream out( "ssnd.out" );
in>>t;
Sieve_of_Eratosthenes();
for( ; t; --t )
{
in>>n;
if( n%2 ) //maybe it is prime
{
i=(n-1)/2;
if( 0 == (is_prime[i>>3]&(1<<(i&7))) )
{
out<<"2 "<<( (1+n)%Modulo )<<'\n';
continue;
}
}
s=nr=1;
for( i=0; i < N && 1LL*PrimeNr[i]*PrimeNr[i] <= n; ++i )
if( 0 == n%PrimeNr[i] )
{
for( j=0; 0 == n%PrimeNr[i]; ++j, n/=PrimeNr[i] );
nr=(nr*j+nr)%Modulo;
s=( (s%Modulo)*( (pow( PrimeNr[i], j+1 )-1)/(PrimeNr[i]-1) )%Modulo )%Modulo;
}
if( n > 1 )
{
nr*=2;
s=( s*( (n*n-1)/(n-1) ) )%Modulo;
}
out<<nr<<' '<<s<<'\n';
}
return 0;
}