zoukankan      html  css  js  c++  java
  • poj 3070 求第n个斐波那契数 矩阵 二分

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

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int a[4];
    
    void j(int n)
    {
        int q,b,c,d;
        if(n==1)
        {
            a[0]=1;a[1]=1;a[2]=1;a[3]=0;
        }
        else
        {
            j(n/2);
            q=a[0]*a[0]+a[1]*a[2];
            b=a[0]*a[1]+a[1]*a[3];
            c=a[2]*a[0]+a[3]*a[2];
            d=a[2]*a[1]+a[3]*a[3];
            a[0]=q%10000; a[1]=b%10000; a[2]=c%10000; a[3]=d%10000;
            if(n%2==1)
            {
               q=a[0]+a[1];
                b=a[0];
                 c=a[2]+a[3];
                d=a[2];
                a[0]=q%10000; a[1]=b%10000; a[2]=c%10000; a[3]=d%10000;
            }
        }
    }
            
    int main()
    {
        int n;    
        while(scanf("%d",&n),n!=-1)
        {
            if(n==0)
                printf("0\n");
           else
           {
              j(n);
            
            
             printf("%d\n",a[1]);
           }
        }
        return 0;
    }
    
            

    一开始我 两个矩阵相乘再弄了一个函数 返回一个数组的指针 貌似是 指针那里 出错了  具体怎么 错的 我也没搞清。。

    贴一下代码  求大神指点

    #include<iostream>
    using namespace std;
    
    
    int *solve(int *a,int *b)  
    {
        int c[4];
        c[0]=a[0]*b[0]+a[1]*b[2];
        c[1]=a[0]*b[1]+a[1]*b[3];
        c[2]=a[2]*b[0]+a[3]*b[2];
        c[3]=a[2]*b[1]+a[3]*b[3];
        return c;
    }
    
    int *j(int n,int *a)
    {
        if(n==1)
            return a;
        int *temp;
        temp=solve(j(n/2,a),j(n/2,a));
       if(n%2==0)
            return temp;
        int p[4]={1,1,1,0};
        return solve(temp,p);
    }
    
    int main()
    {
        int n;    
        while(scanf("%d",&n),n!=-1)
        {
            int a[4]={1,1,1,0};
            int *w;
            w=j(n,a);
            printf("%d\n",w[1]);
        }
        return 0;
    }
  • 相关阅读:
    English Voice of <<Cups>>
    【线段树】奶牛排队(USACO 2007 January Gold)
    【线段树】买水果
    【线段树】卫星覆盖(NOI97)-矩阵切割
    插入排序 (Insertion Sort)
    选择排序 (Selection Sort)
    springboot整合redis
    redis入门及相关API
    mycat配置文件的详细介绍
    redis常用命令
  • 原文地址:https://www.cnblogs.com/assult/p/3101969.html
Copyright © 2011-2022 走看看