Pagini recente » Cod sursa (job #154173) | Cod sursa (job #1956832) | Cod sursa (job #2943594) | Cod sursa (job #465534) | Cod sursa (job #2771972)
#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
#include <bitset>
#define pb(a) push_back(a)
using namespace std;
ifstream cin("pascal.in");
ofstream cout("pascal.out");
long long n, m;
int fact(long long n){
long long p = 1;
for(int i = 1; i <= n; ++i){
p = (1LL * p * i) % m;
}
return p;
}
void euclid(long long a, long long b, long long &x, long long &y){
if(b == 0){
x = y = 1;
}
else{
long long x1, y1;
euclid(b, a % b, x1, y1);
x = y1;
y = x1 - a / b * y1;
}
}
long long InversModular(long long a, long long b){
long long x, y;
euclid(a, b, x, y);
while(x < 0){
x += b;
}
return x;
}
long long casuta(long long i, long long j){
return ((fact(i) % m) % m * (InversModular(fact(i - j) * fact(j), m) % m) % m) % m;
}
int main(){
cin >> n >> m;
long long ans = 0;
if(n % 2 == 0){
for(long long i = 1; i <= n / 2; ++i){
if(casuta(n, i) == 0){
ans += 2;
}
else if(i == n / 2 && !casuta(n, i)){
ans--;
}
}
}
else{
for(long long i = 1; i <= n / 2; ++i){
if(!casuta(n, i)){
ans += 2;
}
}
}
cout << ans;
return 0;
}