zoukankan      html  css  js  c++  java
  • 斐波那契数列第n项

    1:斐波那契数列第n项
    在斐波那契数列中,Fib0=0,Fib1=1,Fibn=Fibn−1+Fibn−2(n>1)。

    给定整数n,求Fibn mod10000。

    输入格式
    输入包含多组测试用例。

    每个测试用例占一行,包含一个整数n。

    当输入用例n=-1时,表示输入终止,且该用例无需处理。

    输出格式
    每个测试用例输出一个整数表示结果。

    每个结果占一行。

    数据范围
    0≤n≤2∗109
    输入样例:
    0
    9
    999999999
    1000000000
    -1
    输出样例:
    0
    34
    626
    6875

    思路:矩阵快速幂 , 每次取模 。

    #include <stdio.h>
    #include <string.h>
    long long n,mod=10000;
    void Matrix1(long long a[2],long long b[2][2])
    {
    	long long c[2]={0};
    	for(int j=0;j<2;j++)
    		{
    			for(int k=0;k<2;k++)
    			{
    				c[j]=(c[j]+a[k]*b[k][j]%mod)%mod;
    			}
    		}
    		memcpy(a,c,sizeof(c));
    }
    void Matrix2(long long b[2][2])
    {
    	long long c[2][2]={0};
    	for(int i=0;i<2;i++)
    	{
    		for(int j=0;j<2;j++)
    		{
    			for(int k=0;k<2;k++)
    			{
    				c[i][j]=(c[i][j]+b[i][k]*b[k][j]%mod)%mod;
    			}
    		 } 
    	}
    	memcpy(b,c,sizeof(c));
    }
    int main()
    {
    	while(~scanf("%lld",&n))
        {   
            if(n==-1) break;
            else
            {  
                long long a[2]={0,1};
                long long b[2][2]={0,1,1,1};
    	        while(n)
    	        {
    		    if(n&1)	Matrix1(a,b);
    		    Matrix2(b);
    		    n>>=1;
    	        }
    	    printf("%lld
    ",a[0]);
            }
        }
        return 0;
    }
    

    2:斐波那契数列 10’
    描述
    已知斐波那契数列 1,1,2,3,5,8,13,21每一项是前两项的和。

    请告诉laofu,第202003281331项的最后一位是多少。(大家写到这题,是不是这个时间呢,嘿嘿~)

    例如:第八项的最后一位是1

    【答案提交】

    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个数字,填写多余的内容将无法得分。

    思路:最后一位只和最后一位有关,所以每次模10取最后一位。

    #include <stdio.h>
    #include <string.h>
    long long n,mod=10,a[2]={0,1},b[2][2]={0,1,1,1};
    void Matrix1(long long a[2],long long b[2][2])
    {
    	long long c[2]={0};
    	for(int j=0;j<2;j++)
    		{
    			for(int k=0;k<2;k++)
    			{
    				c[j]=(c[j]+a[k]*b[k][j]%mod)%mod;
    			}
    		}
    		memcpy(a,c,sizeof(c));
    }
    void Matrix2(long long b[2][2])
    {
    	long long c[2][2]={0};
    	for(int i=0;i<2;i++)
    	{
    		for(int j=0;j<2;j++)
    		{
    			for(int k=0;k<2;k++)
    			{
    				c[i][j]=(c[i][j]+b[i][k]*b[k][j]%mod)%mod;
    			}
    		 } 
    	}
    	memcpy(b,c,sizeof(c));
    }
    int main()
    {
    	scanf("%lld",&n);
        while(n)
    	   {
    		  if(n&1)	Matrix1(a,b);
    		  Matrix2(b);
    		  n>>=1;
    	   }
        printf("%lld
    ",a[0]);
        return 0;
    }
    
  • 相关阅读:
    Qt 利用XML文档,写一个程序集合 二
    Qt 利用XML文档,写一个程序集合 一
    Qt QpushButton 实现长按下功能
    Qt 将字符串转成16进制显示
    Qt-QML-Canvas-雷达扫描仪表简单
    Qt-QML-电子罗盘
    Qt-QML-Canvas写个小小的闹钟
    Qt-Qt5最新增加程序图标方式
    Qt-QMl-自定义自己想要的TabView
    设置position:fixed后元素脱离标准流的解决方法
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14847977.html
Copyright © 2011-2022 走看看