• <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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久se这里只有精品| 四虎国产精品成人免费久久| 久久亚洲AV成人无码软件| 国产精品gz久久久| 久久亚洲精品成人AV| 69国产成人综合久久精品| 国产成人99久久亚洲综合精品 | 久久人人爽人爽人人爽av | 久久久久久久人妻无码中文字幕爆| 精品久久久久久无码不卡| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 丁香五月网久久综合| 一本久久a久久精品综合香蕉 | 久久久久久精品无码人妻| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 97久久久精品综合88久久| 狠狠色噜噜色狠狠狠综合久久| 日本欧美国产精品第一页久久| 成人午夜精品久久久久久久小说| 麻豆av久久av盛宴av| 久久精品青青草原伊人| 久久久久高潮综合影院| 亚洲国产欧美国产综合久久| 亚洲∧v久久久无码精品| 亚洲国产精久久久久久久| 久久99精品久久久久久不卡| 性做久久久久久久久久久| 97香蕉久久夜色精品国产| 99国产精品久久| 久久只有这里有精品4| 99国产欧美久久久精品蜜芽| 日本高清无卡码一区二区久久| 国产成人精品综合久久久久| 欧美伊香蕉久久综合类网站| 婷婷久久精品国产| 久久久久人妻一区精品| 久久天天躁狠狠躁夜夜躁2O2O| 久久强奷乱码老熟女网站| 国产精品99久久免费观看| 久久综合88熟人妻| 久久久久亚洲av无码专区喷水 |