• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 24,  comments - 0,  trackbacks - 0
            求fibonacci數%n,典型的矩陣應用,二分求fibonacci數模一個數,f[0][0]%n 即為所求
            代碼:
             1 #include<cstdio>
             2 #include<iostream>
             3 #include<cmath>
             4 #include<cstring>
             5 
             6 using namespace std;
             7 
             8 unsigned long long N = 0;
             9 struct Mat
            10 {
            11     unsigned long long mat[2][2];
            12     Mat operator * (Mat &b)
            13     {
            14         Mat tmp;
            15         memset(tmp.mat,0,sizeof(tmp.mat));
            16         for(int i = 0; i < 2; ++i)
            17         {
            18             for(int j = 0; j < 2; ++j)
            19             {
            20                 for(int k = 0; k < 2; ++k)
            21                 {
            22                     tmp.mat[i][j] += mat[i][k] * b.mat[k][j];
            23                 }
            24                 if(tmp.mat[i][j] > N) tmp.mat[i][j] %= N;
            25             }
            26         }
            27         return tmp;
            28     }
            29     Mat pow(int k)
            30     {
            31         if(k == 0)
            32         {
            33             mat[0][0] = mat[1][1] = 1;
            34             mat[0][1] = mat[1][0] = 0;
            35             return *this;
            36         }
            37         else if(k == 1) return *this;
            38         else
            39         {
            40             Mat tmp;
            41             tmp = *this * (*this);
            42             if(k & 1) return tmp.pow(k/2) * (*this);
            43             else return tmp.pow(k/2);
            44         }
            45     }
            46 };
            47 unsigned long long n,m;
            48 int main()
            49 {
            50     while(cin >> n >> m)
            51     {
            52         if(n == 0) cout << "0" << endl;
            53         else
            54         {
            55             N = 1<<m;
            56             Mat f;
            57             f.mat[0][0] = f.mat[0][1] = f.mat[1][0] = 1;
            58             f.mat[1][1] = 0;
            59             f = f.pow(n-1);
            60             cout << f.mat[0][0]%N << endl;
            61         }
            62     }
            63     return 0;
            64 }
            還可以根據循環節做:

             1 #include<cstdio>
             2 #include<iostream>
             3 using namespace std;
             4 long long f[2000000];
             5 int main()
             6 {
             7     int n , m;
             8     while(cin >> n >> m)
             9     {
            10         f[0] = 0; f[1] = 1;
            11         long long  N = 1<<m;
            12         int i;
            13         for(i = 2; i <= n; ++i)
            14         {
            15             f[i] = (f[i-1] % N + f[i-2] % N) % N;
            16             if(f[i] == 1 && f[i-1] == 0) break;
            17         }
            18         if(i > n) cout << f[n] << endl;
            19         else cout << f[n % (i - 1)] << endl;
            20     }
            21     return 0;
            22 }
            23 
            蔡神代碼
             1 #include <iostream>
             2 #include<cstdio>
             3 #include<cmath>
             4 #include<cstring>
             5 using namespace std;
             6 typedef long long ll;
             7 ll dp[1000];
             8 
             9 ll hash(ll t,ll n)
            10 {
            11     return t*4+n%4;
            12 }
            13 
            14 ll f(ll n,ll m,ll cur)
            15 {
            16     if(n<3)
            17     return 1%m;
            18     ll u=hash(cur,n);
            19     if(dp[u]>-1)
            20     return dp[u];
            21     ll i=n/2;
            22     ll f1=f(i,m,cur+1);
            23     ll f2=f(n-i-1,m,cur+1);
            24     ll f3=f(i+1,m,cur+1);
            25     ll f4=f(n-i,m,cur+1);
            26     return dp[u]=((f1*f2)%m+(f3*f4)%m)%m;
            27 }
            28 
            29 int main()
            30 {
            31     ll m,n;
            32     while(scanf("%lld%lld",&n,&m)!=EOF)
            33     {
            34         memset(dp,-1,sizeof(dp));
            35         printf("%lld\n",n?f(n,1<<m,0):0);
            36     }
            37     return 0;
            38 }
            posted on 2011-11-06 00:31 ACSeed 閱讀(299) 評論(0)  編輯 收藏 引用
            <2011年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            常用鏈接

            留言簿(1)

            隨筆檔案

            偶像的Blog

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            99久久这里只有精品| 精品久久久久久无码人妻蜜桃| 模特私拍国产精品久久| 97精品伊人久久大香线蕉| 国产成人精品综合久久久| 国产成人无码久久久精品一| 久久综合综合久久97色| 狠狠色丁香婷婷久久综合五月 | 国産精品久久久久久久| 色婷婷狠狠久久综合五月| 一本一道久久综合狠狠老| 狠狠色丁香婷综合久久| 久久久久久久91精品免费观看| 久久综合香蕉国产蜜臀AV| 日日狠狠久久偷偷色综合免费| 97久久精品人妻人人搡人人玩| 色天使久久综合网天天| 久久综合九色综合欧美狠狠| 777午夜精品久久av蜜臀| 久久久这里有精品中文字幕| 久久国产精品久久| 久久狠狠高潮亚洲精品| 精品久久久久久久久免费影院| 久久精品无码一区二区日韩AV| 麻豆精品久久久久久久99蜜桃| 久久午夜电影网| av无码久久久久不卡免费网站 | 精品国产日韩久久亚洲| 天天久久狠狠色综合| 香蕉久久夜色精品升级完成| 色婷婷狠狠久久综合五月| 色噜噜狠狠先锋影音久久| 国产成人无码精品久久久性色 | 亚洲av成人无码久久精品| 亚洲AⅤ优女AV综合久久久| 狠狠色婷婷久久一区二区三区| 青青草原综合久久大伊人导航| A级毛片无码久久精品免费| 人妻精品久久久久中文字幕| 久久精品国产亚洲AV香蕉| 久久精品国产亚洲一区二区|