斐波那契数列尾数循环

尾数循环

斐波那契数列的个位数:一个60步的循环

11235,83145,94370,77415,61785.38190,

99875,27965,16730,33695,49325,72910…

进一步,斐波那契数列的最后两位数是一个300步的循环,最后三位数是一个1500步的循环,最后四位数是一个15000步的循环,最后五位数是一个150000步的循环。

验证尾数循环

#include<stdio.h>
int main() {
    long long int f1 = 1, f2 = 1;
    long long int fn;
    int n = 100;
    for(int i = 3; i <= n; i++) {
        fn = f1 + f2;
        f1 = f2;
        f2 = fn;
        printf("f%d: %lld\n", i, fn % 10);
    }
    return 0;
} 

结果:

f3: 2
f4: 3
f5: 5
f6: 8
f7: 3
f8: 1
f9: 4
f10: 5
f11: 9
f12: 4
f13: 3
f14: 7
f15: 0
f16: 7
f17: 7
f18: 4
f19: 1
f20: 5
f21: 6
f22: 1
f23: 7
f24: 8
f25: 5
f26: 3
f27: 8
f28: 1
f29: 9
f30: 0
f31: 9
f32: 9
f33: 8
f34: 7
f35: 5
f36: 2
f37: 7
f38: 9
f39: 6
f40: 5
f41: 1
f42: 6
f43: 7
f44: 3
f45: 0
f46: 3
f47: 3
f48: 6
f49: 9
f50: 5
f51: 4
f52: 9
f53: 3
f54: 2
f55: 5
f56: 7
f57: 2
f58: 9
f59: 1
f60: 0
f61: 1
f62: 1
f63: 2
f64: 3
f65: 5
f66: 8
f67: 3
f68: 1
f69: 4
f70: 5
f71: 9
f72: 4
f73: 3
f74: 7
f75: 0
f76: 7
f77: 7
f78: 4
f79: 1
f80: 5
f81: 6
f82: 1
f83: 7
f84: 8
f85: 5
f86: 3
f87: 8
f88: 1
f89: 9
f90: 0
f91: 9
f92: 9
f93: -8
f94: 1
f95: -7
f96: -6
f97: -3
f98: 7
f99: -6
f100: 1

验证过程不太严谨(到达F90 多的时候数字大小已经超过了 long long int 的值的范围,改进写法是用数组模拟),但从结果还是可以看到尾数的60循环是存在的。

原文地址:https://www.cnblogs.com/bearcarl/p/8454374.html

时间: 2024-11-09 00:12:25

斐波那契数列尾数循环的相关文章

HDU 5451 广义斐波那契数列

这道题目可以先转化: 令f(1) = 5+2√6 f(2) = f(1)*(5+2√6) ... f(n) = f(n-1)*(5+2√6) f(n) = f(n-1)*(10-(5-2√6)) = 10*f(n-1)-(5-2√6)f(n-1) = 10*f(n-1) - 10/(5+2√6) f(n-1) = 10*f(n-1) - 10/(5+2√6) * (5+2√6)f(n-2) = 10*f(n-1) - f(n-2) 那么就可以写成矩阵相乘的形式了 (f(n) , f(n-1))

斐波那契数列小结

关于斐波那契数列,相信大家对它并不陌生,关于其的题目也不在少数. 我现在总结一下有关它的一些有趣的性质. 基础问题 1.求斐波那契数列的第k项 常规方法是利用f[i]=f[i-1]+f[i-2],时间复杂度为O(n) 显然最多处理到1e7 假如n到1e18怎么办,O(n)显然就T飞了. 我们考虑利用什么方法来加速 斐波那契数列数列是其次线性递推式 所以是可以利用矩阵乘法进行求解的 $$ \left [ \begin{matrix} 1 & 1 \\ 1 & 0  \end{matrix}

简述java递归与非递归算法,0-100求和,斐波那契数列,八皇后,汉诺塔问题

一:什么是递归算法? 递归算法就是直接或者间接的调用自己的方法,在达到一个条件的时候停止调用(递归出口),所以一定要找准好条件,让递归停止,否则就会是无限进行下去 二:递归程序设计的关键 1:找出调用中所需要的参数 2:返回的结果 3:递归调用结束的条件 三:递归程序注意 1:要有方法中自己调用自己 2:要有分支结构 3:要有结束的条件 四:简单叙述递归函数的优缺点 优点: 1:简洁清晰,实现容易,可读性好 2:在遍历的算法中,递归比循环更为简单 缺点: 1:效率低,使用递归函数是有空间和时间的

用for循环和递归调用写出1~N的斐波那契数列的和 和第N位的数

首先注意: 代码是从上往下,从左往右执行的!! 这是for循环写的 m=任意数.代表1~多少位的和 public class Fei_Bo_Na_Qi{    public static void main(String[] args){        int m = 30;  //这里代表1~30位的和        System.out.println( "斐波那契数列的第 "+m+" 位数为: "+m1(m) );//  在输出的时候调用函数    }   

【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现)

斐波那契数列:0.1.1.2.3.5.8.13………… 他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和. > 递归实现 看到这个规则,第一个想起当然是递归算法去实现了,于是写了以下一段: public class RecursionForFibonacciSequence { public static void main(String[] args) { System.out.println(recursion(10)); } public static double

java循环输出斐波拉契数列

斐波拉契--引用于百度百科 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为

斐波那契数列——摘自搜狗百科

1数列公式 递推公式 斐波那契数列:0.1.1.2.3.5.8.13.21.34.55.89.144... 如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式: F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3) 通项公式 通项公式的推导方法一:利用特征方程 线性递推数列的特征方程为: X^2=X+1 解得 X1=(1+√5)/2, X2=(1-√5)/2. 斐波拉契数列则F(n)=C1*X1^n + C2*X2^n ∵F(1)=F(2

第四章习题:斐波那.契数列&amp;&amp;吸血鬼数字

package com.twoslow.cha4; /** * 斐波那契数列:从3个数字起,每一个数都是前2个数之和:1 1 2 3 5 8 13... * @author sai * */ public class Fibonacci { public static void main(String[] args) { for(int i = 0 ; i < 10 ;i++) { System.out.print(fib(i) + "."); } } public static

Fibonacci斐波拉契数列----------动态规划DP

n==10 20 30 40 50 46 体验一下,感受一下,运行时间 #include <stdio.h>int fib(int n){ if (n<=1)     return 1; else            return fib(n-1)+fib(n-2); }int main( ){ int n; scanf("%d",&n); printf("%d\n" ,fib(n) );} 先 n==10 20 30 40 50 46