求第n行楊輝三角(n很大,取模
阿新 • • 發佈:2017-05-09
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)){ 27mod=1e9+7; 28 init(); 29 } 30 return 0; 31 }
為什麽不能算出來取模而用逆元呢
因為我們還要通過該結果遞推其他的項,直接取模可能造成後面的數不整除前面的項
如果只算一項,取模是可以的
或者只取模一次,那麽可以直接對結果取模
算逆元時一定要考慮式子對逆元的整除性
求第n行楊輝三角(n很大,取模