• <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 閱讀(302) 評論(0)  編輯 收藏 引用
            <2012年4月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(1)

            隨筆檔案

            偶像的Blog

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲国产精品婷婷久久| 久久精品亚洲中文字幕无码麻豆| 国内精品久久久久久野外| 国产精品久久久久AV福利动漫| 7777久久亚洲中文字幕| 久久久国产精华液| 伊人久久精品无码av一区| 99热精品久久只有精品| 亚洲国产成人久久综合一区77 | 日韩精品久久久久久免费| 久久九九精品99国产精品| 亚洲综合精品香蕉久久网97| 国产精品99久久久久久董美香| 一本久久综合亚洲鲁鲁五月天| 三级三级久久三级久久| 国产精品一区二区久久| 一97日本道伊人久久综合影院 | 国产成人无码精品久久久久免费| 少妇无套内谢久久久久| 91精品国产高清久久久久久国产嫩草 | 久久婷婷人人澡人人| 精品视频久久久久| 久久99久久99小草精品免视看| 久久成人国产精品免费软件| 国内精品伊人久久久久网站| www性久久久com| 色综合久久综合中文综合网| 人妻丰满?V无码久久不卡| 国产A级毛片久久久精品毛片| 久久人人爽人人爽人人AV| 欧美日韩久久中文字幕| 久久久久99精品成人片牛牛影视| 国产精品久久久天天影视| 久久99精品国产自在现线小黄鸭| 国产69精品久久久久观看软件 | 久久久久久狠狠丁香| av国内精品久久久久影院| 国产成人精品白浆久久69| 久久91精品国产91久久小草| 国产精品9999久久久久| 99久久99久久精品国产片果冻|