• 2019.3.30


    1.快速幂:

    用11举例,11=2^0+2^1+2^3

     1 int main()
     2 {
     3    ll a,b;
     4    while(cin>>a>>b){
     5    ll ans=1,p=a;
     6    while(b){
     7       if(b&1)
     8       ans*=p;
     9       p*=p; 
    10       b>>=1;
    11    }
    12    cout<<ans<<endl;  
    13    }
    14    return 0;
    15 }
    View Code

    2.矩阵快速幂

    求斐波那契数列,求F(n)等于求二阶矩阵的n - 1次方,所以答案为a[0][0];

    下题

    F(n)在a[0][1],故答案为a[0][1].

    http://poj.org/problem?id=3070

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 #define N 15000
     7 #define ll long long
     8 #define inf 0x3f3f3f3f
     9 #define mem(a) memset(a,0,sizeof(a))
    10 const int mod=1e4;
    11 struct mat{
    12 int a[2][2];
    13 };
    14 mat mat_mul(mat x,mat y){
    15   mat res;
    16   mem(res.a);
    17   for(int i=0;i<2;i++)
    18   for(int j=0;j<2;j++){
    19         res.a[i][j]=0;
    20     for(int k=0;k<2;k++)
    21      res.a[i][j]=(res.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
    22   }
    23      return res;
    24 }
    25 int pow(mat x,int n){
    26     mat ans;
    27     ans.a[0][0]=1,ans.a[1][0]=0;
    28     ans.a[0][1]=0,ans.a[1][1]=1;
    29     while(n){
    30         if(n&1)
    31         ans=mat_mul(ans,x);
    32         x=mat_mul(x,x);
    33         n>>=1;
    34     }
    35     return ans.a[0][1];
    36 }
    37 int main()
    38 {
    39   int n;
    40   mat base={1,1,1,0};
    41   while(cin>>n&&n!=-1){
    42     cout<<pow(base,n)<<endl;
    43   }
    44    return 0;
    45 }
    poj 3070

  • 相关阅读:
    关于正则表达式
    hashilib模块和hmac模块
    PyYAML模块和ConfigParser模块
    xml处理模块
    shutil模块(文件,文件夹,压缩包处理)
    十四、浏览器检测
    十三、BOM
    十二、匿名函数和闭包
    并发,并行,同步,异步的区别
    java中常见的类,接口,包,异常
  • 原文地址:https://www.cnblogs.com/XXrll/p/10627756.html
Copyright © 2020-2023  润新知