Pagini recente » Cod sursa (job #12041) | Cod sursa (job #1927519) | Cod sursa (job #2687132) | Cod sursa (job #2515678) | Cod sursa (job #1156113)
#include<cstdio>
#include<vector>
using namespace std;
#define MOD 9901
#define MAX 10001
#define pb push_back
int A , B , k , d[MAX] , a[MAX] , prod[MAX] , sol ;
bool u[MAX];
vector<int > p;
int powMod(long long a , int n)
{
if( n == 0) return 1;
if(n == 1) return a;
if(n%2) return (a*powMod((a*a)%MOD,(n-1)/2))%MOD;
else return powMod((a*a)%MOD,n/2)%MOD;
}
void ciur ()
{
p.pb(2);
for(int i = 3 ; i < MAX ; i+=2 )
if(!u[i])
{
for(int j = i*3 ; j < MAX ; j+=2*i)
u[j] = 1;
p.pb(i);
}
}
int main()
{
freopen("sumdiv.in" , "r" , stdin );
freopen("sumdiv.out" , "w" , stdout );
scanf("%d%d" , &A , &B );
ciur();
for(int i = 0 ; p[i]*p[i] <= A ; ++i )
{
if(A%p[i]==0)
d[++k] = p[i];
while(A%p[i] == 0)
{
A/=p[i];
a[k]++;
}
}
if(A > 1 && A%MOD != 1)
{
d[++k] = A%MOD;
A = 1;
a[k] = 1;
}
for(int i = 1 ; i <= k ; ++i )
{
int p1 = powMod(d[i],a[i]*B+1)-1;
if(p1 < 0)p1+=MOD;
int p2 = powMod(d[i]-1,MOD-2);
if(p2<0)p2+=MOD;
prod[i] = (p1*p2)%MOD;
}
sol = 1;
for(int i = 1 ; i<= k ; ++i )
sol = (sol*prod[i])%MOD;
if(A > 1)sol = (1ll*sol*(B+1))%MOD;
printf("%d" , sol );
return 0;
}