Pagini recente » Cod sursa (job #20647) | Cod sursa (job #886741) | Cod sursa (job #1712125) | Profil stay_awake77 | Cod sursa (job #405606)
Cod sursa(job #405606)
#include <vector>
#include <fstream>
#include <cstdlib>
#define Modulo 9901
/*
*
*/
using namespace std;
char is_prime[3125001];
vector< int > Prime;
inline int pow( int x, int n )
{
x%=Modulo;
int r=1;
for( ; n; n>>=1 )
{
if( n&1 )
r=(r*x)%Modulo;
x=(x*x)%Modulo;
}
return r;
}
int main( void )
{
int A, B, s=1, i, j;
ifstream in( "sumdiv.in" );
in>>A>>B;
if( A <= 1 || 0 == B )
{
ofstream out("sumdiv.out");
out<<'1';
return EXIT_SUCCESS;
}
if( 2 == A )
{
ofstream out("sumdiv.out");
out<<( ( (1<<(B+1))-1 )%Modulo );
return EXIT_SUCCESS;
}
if( 0 == A%2 )
{
for( j=0; 0 == A%2; ++j, A/=2 );
s=(s*pow( 2, j+B+1 )-s)%Modulo;
}
for( i=1; ( (i*i)<<1 )+(i<<1) <= A; ++i )
if( 0 == ( is_prime[i>>3] & ( 1<<(i&7) ) ) )
for( j=( (i*i)<< 1 )+(i<<1); (j<<1)+1 <= A; j+=(i<<1)+1 )
is_prime[j>>3]|=(1<<(j&7));
for( i=3; i*i <= A; ++i )
if( 0 == A%i )
{
j=(i-1)>>1;
if( 0 == ( is_prime[j>>3] & ( 1<<(j&7) ) ) )
{
for( j=0; 0 == A%i; ++j, A/=i );
s=( s*( pow( i, j+B+1 )-1 )/(i-1) )%Modulo;
}
}
if( A > 1 )
s=( s* ( pow( A, B+2 )-1)/(A-1) )%Modulo;
ofstream out( "sumdiv.out" );
out<<s;
return 0;
}