码迷,mamicode.com
首页 > 其他好文 > 详细

求第n行杨辉三角(n很大,取模

时间:2017-05-09 19:42:57      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:求逆   init   scanf   iostream   div   void   pac   long   using   

 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很大,取模

标签:求逆   init   scanf   iostream   div   void   pac   long   using   

原文地址:http://www.cnblogs.com/linkzijun/p/6832156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!