Pagini recente » Cod sursa (job #2949094) | Cod sursa (job #3033233) | Cod sursa (job #744714) | Cod sursa (job #3332283) | Cod sursa (job #3306771)
#include <bits/stdc++.h>
#define MOD 2000003
using namespace std;
void euclid(int a, int b, int& x1, int& y1) ///invers modular
{
if(b==0)
{
x1=1;
y1=1;
}
else
{
int x2, y2;
euclid(b, a%b, x2, y2);
x1=y2;
y1=x2-a/b*y2;
}
}
int C(int a, int b) ///combinari de a luate cate b
{
if(a<b) return 0;
int C=1, fact=1; ///fact = b!
for(int i=1; i<=b; i++)
{
C=(long long)C*(a-i+1) %MOD;
fact=(long long)fact*i %MOD;
}
int invers_mod, y; ///invers_mod = inversul modular al lui b!
euclid(fact, MOD, invers_mod, y);
while(invers_mod<0) invers_mod+=MOD;
C=(long long)C*invers_mod %MOD;
return C;
}
int main()
{
ifstream in("sandokan.in");
ofstream out("sandokan.out");
int n, k;
in >> n >> k;
///la final vor fi n%(k-1) elemente ramase (se elimina k-1 elemente de fiecare data)
///fiindca cel mai mare element din sir nu poate fi eliminat, acela va aparea sigur in sirul final
///astfel, numarul de moduri de a alege cele n%(k-1) elemente finale va fi combinari de n-1 luate cate n%(k-1)-1
out << C(n-1, n%(k-1)-1);
return 0;
}