尾数循环
斐波那契数列的个位数:一个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循环是存在的。