Pagini recente » Cod sursa (job #838003) | Cod sursa (job #2100688) | Cod sursa (job #2570046) | Cod sursa (job #2101981) | Cod sursa (job #3157390)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pascal.in");
ofstream fout("pascal.out");
void gcd(int a, int b, int &x, int &y){
if(b == 0){
x = 1;
y = 0;
return;
}
int x0,y0;
gcd(b, a % b, x0, y0);
x = y0;
y = x0 - (a / b) * y0;
}
int invmod(int n, int m){
int x,y;
gcd(n,m,x,y);
if(x % m == 0) return m;
else return (1LL * x % m + m) % m;
}
int main()
{
int n,d,k,s = 0;
long long val = 1;
fin >> n >> d;
//nr din triunghiul lui pascal de pe linia n pozitia k = C(n - 1,k) = (n - 1)! / (k! * (n - 1 - k)!)
// C(n,k + 1) = C(n,k) * (n - k) / (k + 1);
for(k = 1; k < n / 2; k++){
val =(1LL * val * (n - k) % d * invmod(k + 1,d)) % d;
if(val == 0){
val = d;
s++;
}
}
s <<= 1;
val =(1LL * val * (n - k) % d * invmod(k + 1,d)) % d;
if(val == 0){
val = d;
s++;
}
fout << s;
return 0;
}