zoukankan      html  css  js  c++  java
  • 洛谷p1306 斐波那契公约数

    gcd(fib[i],fib[j]) = fib[gcd(i,j)];

    太6了
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<string>
     5 #include<cmath>
     6 #include<cstdio>
     7 #include<iomanip>
     8 
     9 #define ll long long
    10 
    11 using namespace std;
    12 
    13 const int mod = 1e8;
    14 
    15 ll a, b;
    16 
    17 ll base[3][3];
    18 ll res[2][2];
    19 ll tmp[3][3];
    20 
    21 void base_upd()
    22 {
    23     for(int i = 1 ; i <= 2 ; i++){
    24         for(int j = 1 ; j <= 2 ; j++){
    25             for(int k = 1 ; k <= 2 ; k++){
    26                 tmp[i][j] += base[i][k] * base[k][j] % mod;
    27                 //tmp[i][j] %= mod;
    28             }
    29         }
    30     }
    31     
    32     for(int i = 1 ; i <= 2 ; i++){
    33         for(int j = 1 ; j <= 2 ; j++){
    34             base[i][j] = tmp[i][j] % mod;
    35         }
    36     }
    37     
    38     tmp[1][1] = tmp[1][2] = tmp[2][1] = tmp[2][2] = 0;
    39 }
    40 
    41 void res_upd()
    42 {
    43     for(int j = 1 ; j <= 2 ; j++){
    44         for(int k = 1 ; k <= 2 ; k++){
    45             tmp[1][j] += base[k][j] * res[1][k] % mod;
    46             //base[1][j] %= mod;
    47         }
    48     }
    49     
    50     for(int j = 1 ; j <= 2 ; j++){
    51         res[1][j] = tmp[1][j] % mod;
    52     }
    53     
    54     tmp[1][1] = tmp[1][2] = tmp[2][1] = tmp[2][2] = 0; 
    55 }
    56 
    57 void matrix_ksm(ll k)
    58 {
    59     while(k)
    60     {
    61         if(k & 1){
    62             res_upd();    
    63         }
    64         base_upd();
    65         
    66         k >>= 1;
    67     }
    68 }
    69 
    70 ll solve(ll x)
    71 {
    72     base[1][1] = base[1][2] = base[2][1] = 1;
    73     res[1][1] = res[1][2] = 1;
    74     
    75     ll ans;
    76     
    77     if(x == 1 || x == 2){
    78         ans = 1;
    79     }else{
    80         matrix_ksm(x - 2);
    81         ans = res[1][1];
    82     }
    83     
    84     return ans;
    85 }
    86 
    87 int main(){
    88     
    89     cin >> a >> b;
    90     
    91     ll k = __gcd(a, b);
    92     
    93     cout << solve(k) << endl;
    94     
    95     return 0;
    96 }
     
  • 相关阅读:
    【Java】 Spring 框架初步学习总结(一)简单实现 IoC 和 AOP
    【Java】MyBatis框架初步学习总结
    CPLEX在Linux上的安装与配置
    CPLEX在IDEA上的配置
    WINDOWS系统下用BAT脚本运行JAR包
    启发式算法:遗传算法 (Genetic algorithm)
    Java基础知识:集合框架
    Java基础知识:Collection接口
    打印n位数的最大值
    我喜欢的博客
  • 原文地址:https://www.cnblogs.com/ecustlegendn324/p/13669936.html
Copyright © 2011-2022 走看看