/*
(1) 1 <= m <= n <= 1000 和 1 <= p <= 10^9 ( p可以是任何數 )
這個問題比較簡單,組合數的計算可以靠 楊輝三角 ,那麼由於和的範圍小,直接兩層迴圈即可。
*/long long c[maxn][maxn];
void comb(int n, int m, int p)
}
/*
1 <= m <= n <= 10^18 和 2 <= p <= 10^5 (p 是素數)
lucas定理
*/long long mod_pow(long long n, long long k, long long p)
long long comb(long long n, long long m, long long p)
return zi * mod_pow(mu, p - 2, p) % p;
}long long lucas(long long n, long long m, long long p)
/* 非遞迴的快速冪取模
long long mod_pow(long long x, long long k, long long mod)
return ans;
}*/
/*
1 <= m,n <= 10^6 和 p <= 10^9 (p不一定是素數)
*/#include#include#includeusing namespace std;
const long long maxn = 500005;
int prime[maxn]; // 第i個素數(從0開始計數)
bool is_prime[maxn+1]; // is_prime[i]為true表示i是素數
int getprime(int n)
}return p;
}long long count(long long x, long long y)
return ret;
}long long mod_pow(long long n, long long k, long long p)
long long solve(long long n, long long m, long long p)
return ans;
}// 打素數表的時候要注意, 最大的素數 要 大於 輸入的n
int main()
return 0;
}
Lucas 組合數取模
組合數取模就是求 cn mmod p cmn modp 的值,當然根據n,m,p n,m p 的取值範圍不同,採取的方法也不一樣。p p 比較大就只能乙個乙個算如 ll c one by one ll n,ll m 組合數乙個乙個算但是不是很大的要預先處理好階乘 數很大需要逆元 typedef lo...
組合數(楊輝三角)
原來組合數和楊輝三角是有關係的 楊輝三角上的每乙個數字都等於它的左上方和右上方的和 除了邊界 第n行,第m個就是,就是c n,m 從0開始 所以以後求楊輝三角或者組合數都可以用到下面的遞推公式 includeconst int n 2000 5 const int mod int 1e9 7 int...
組合數 楊輝三角
不難想到,我們可以用二維陣列來實現。上 include intmain i,j scanf d n for i 1 i n i a i 1 1 for i 2 i n i for i 1 i n i printf n return0 這樣我們實現了楊輝三角。更近一步,我們得到 用遞迴的辦法來實現也可...