Cod sursa(job #3157390)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 15 octombrie 2023 14:37:05
Problema Pascal Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#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;
}