• <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數(shù)%n,典型的矩陣應(yīng)用,二分求fibonacci數(shù)模一個數(shù),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 }
            還可以根據(jù)循環(huán)節(jié)做:

             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 閱讀(300) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2011年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            常用鏈接

            留言簿(1)

            隨筆檔案

            偶像的Blog

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久天堂电影网| 国产色综合久久无码有码| 国产精品久久国产精麻豆99网站| 色综合久久久久无码专区 | 久久夜色精品国产www| 午夜精品久久久久9999高清| 2021最新久久久视精品爱| 久久久久成人精品无码中文字幕| 国产精品久久久久乳精品爆| 波多野结衣AV无码久久一区| 国产精品日韩深夜福利久久| 精品久久久无码21p发布| 久久青青草原精品影院| 久久久久久国产a免费观看黄色大片 | 久久无码专区国产精品发布| 久久99精品国产一区二区三区 | 久久亚洲国产精品一区二区| 亚洲七七久久精品中文国产| 亚洲国产精品婷婷久久| 77777亚洲午夜久久多喷| 久久久久亚洲精品天堂久久久久久| 国内精品九九久久久精品| 欧美精品乱码99久久蜜桃| 久久精品国产亚洲Aⅴ香蕉| 国内精品久久久久影院日本| 久久久无码精品亚洲日韩京东传媒| 久久国产精品一区| 94久久国产乱子伦精品免费 | 少妇人妻88久久中文字幕| 欧美亚洲日本久久精品| 亚洲综合婷婷久久| 久久99国产精品一区二区| 精品久久人妻av中文字幕| 亚洲va国产va天堂va久久| 中文字幕精品无码久久久久久3D日动漫| 精品久久一区二区| 欧美综合天天夜夜久久| 久久99精品国产99久久6男男| 久久亚洲国产精品一区二区| 亚洲成人精品久久| 精品无码人妻久久久久久|