1. 程式人生 > >求第n行楊輝三角(n很大,取模

求第n行楊輝三角(n很大,取模

int 為什麽不能 style code 為我 max sin clas pan

 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 typedef  long long ll;
 6 const int maxn=1000;
 7 ll mod;int n;
 8 ll c[100000],A[100000];
 9 void init(){
10     A[1]=1;
11     ll p=mod;
12         //線性求逆元
13     for(int i=2;i<=n;++i){
14         A[i] = ((p-(p / i)) * A[p % i]%p+p)%p;
15 } 16 c[0]=1; 17 printf("1->"); 18 for(int i=1;i<=n;++i){ 19 //先c[i-1]*(n-i+1),否則c[i-1]可能不整除i 20 c[i]=(((c[i-1]*(n-i+1)%p)*A[i]))%p; 21 printf("%lld->",c[i]); 22 } 23 printf("\n"); 24 } 25 int main(){ 26 while(~scanf("%d",&n)){ 27
mod=1e9+7; 28 init(); 29 } 30 return 0; 31 }

為什麽不能算出來取模而用逆元呢

因為我們還要通過該結果遞推其他的項,直接取模可能造成後面的數不整除前面的項

如果只算一項,取模是可以的

或者只取模一次,那麽可以直接對結果取模

算逆元時一定要考慮式子對逆元的整除性

求第n行楊輝三角(n很大,取模