hdu3117 斐波那契前后4位
题意:
求斐波那契的前后4位,n <= 10^8.
思路:
至于前四位,和hdu1568的求法一样:
http://blog.csdn.net/u013761036/article/details/38726907
后四位也很好求,后四位我们可以用矩阵+快速幂去求,斐波那契的矩阵
很好推
x0 x1 * 0 1 = x1 x2
1 1
这样就直接ok了,后四位直接在跑矩阵的时候对10000取余就行了。
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct
{
__int64 mat[3][3];
}A; A mat_mat(A a ,A b)
{
A c;
memset(c.mat ,0 ,sizeof(c.mat));
for(int k = 1 ;k <= 2 ;k ++)
for(int i = 1 ;i <= 2 ;i ++)
if(a.mat[i][k])
for(int j = 1 ;j <= 2 ;j ++)
{
c.mat[i][j] += (a.mat[i][k]) * (b.mat[k][j]);
c.mat[i][j] %= 10000;
}
return c;
} A quick_mat(A a ,int b)
{
A c;
memset(c.mat ,0 ,sizeof(c.mat));
for(int i = 1 ;i <= 2 ;i ++)
c.mat[i][i] = 1;
while(b)
{
if(b&1) c = mat_mat(c ,a);
a = mat_mat(a ,a);
b >>= 1;
}
return c;
} int num[40]; void ini()
{
num[0] = 0 ,num[1] = 1;
for(int i = 2 ;i<= 39 ;i ++)
num[i] = num[i-1] + num[i-2];
} int main ()
{
ini();
int n;
A aa;
while(~scanf("%d" ,&n))
{
if(n <= 39)
{
printf("%d\n" ,num[n]);
continue;
}
double now = -0.5 * log10(5.0) + n * 1.0 * log10((1+sqrt(5.0))/2);
double bit = now - int(now);
int a = int(pow(10.0 ,bit) * 1000);
aa.mat[1][1] = 0;
aa.mat[2][1] = aa.mat[1][2] = aa.mat[2][2] = 1;
aa = quick_mat(aa ,n);
int b = 0 * aa.mat[1][1] + 1 * aa.mat[2][1];
printf("%d...%04d\n" ,a ,b);
}
return 0;
}
hdu3117 斐波那契前后4位的更多相关文章
- hdu1568斐波那契前4位
题意: 就是求斐波那契数,但是只要求输出前四位,(n<=100000000). 思路: 这个要用到斐波那契的公式和一些log的规律,直接打看着很乱,直接在网上偷张图片吧: ...
- hdu1568&&hdu3117 求斐波那契数前四位和后四位
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=2 ...
- HDU 1568 Fibonacci【求斐波那契数的前4位/递推式】
Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Proble ...
- Python基础(二):斐波那契数列、模拟cp操作、生成8位随机密码
一.斐波那契数列 目标: 编写fib.py脚本,主要要求如下: 输出具有10个数字的斐波那契数列 使用for循环和range函数完成 改进程序,要求用户输入一个数字,可以生成用户需要长度的斐波那契数列 ...
- 求斐波那契数列第n位的几种实现方式及性能对比(c#语言)
在每一种编程语言里,斐波那契数列的计算方式都是一个经典的话题.它可能有很多种计算方式,例如:递归.迭代.数学公式.哪种算法最容易理解,哪种算法是性能最好的呢? 这里给大家分享一下我对它的研究和总结:下 ...
- 使用一位数组解决 1 1 2 3 5 8 13 数列问题 斐波纳契数列 Fibonacci
斐波纳契数列 Fibonacci 输出这个数列的前20个数是什么? 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 使用数组实现输出数列的前30 ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- KI的斐波那契_DFS
Description KI十分喜欢美丽而优雅的斐波那契数列,最近他新认识了一种斐波那契字符串,定义如下 f (0) = b, f (1) = a, f (2) = f (1) + f (0) = a ...
- 关于斐波拉契数列(Fibonacci)
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
随机推荐
- PAT-1018(Public Bike Management)最短路+额外条件+所有最短路中找出满足条件的路径+dijkstra算法
Public Bike Management PAT-1018 使用一个vector来存储所有最短路的前驱结点,再通过使用dfs和一个额外的vector记录每一条路径 #include<iost ...
- go中errgroup源码解读
errgroup 前言 如何使用 实现原理 WithContext Go Wait 错误的使用 总结 errgroup 前言 来看下errgroup的实现 如何使用 func main() { var ...
- python内存管理&垃圾回收
python内存管理&垃圾回收 引用计数器 环装双向列表refchain 在python程序中创建的任何对象都会放在refchain连表中 name = '张三' age = 18 hobby ...
- Navicat 121版本激活工具
以下是工具的链接: https://github.com/DoubleLabyrinth/navicat-keygen/blob/windows/README_FOR_WINDOWS.zh-CN.md ...
- 92反转链表II
# Definition for singly-linked list.# 这道题还是有点复杂的,但是是有套路的,套用反转链表的想法class ListNode: def __init__(self, ...
- 从新建文件夹开始构建UtopiaEngine(1)
序言 在苦等了半年多之后,我终于开始了向往已久的实时NPR游戏引擎项目--Utopia Engine,这半年多一直为了构建这个引擎在做很多准备:多线程.动态链接库.脚本引擎.立即渲染GUI--统统吃了 ...
- 历史性突破:使用 .net core 日处理消息量超过 1.7 万条!
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程: .net core 和 WPF 开发升讯威在线客服系统:目录 https://blog.she ...
- 如何快速在odoo中创建自己的菜单
上一篇内容:如何快速创建odoo模块,使用脚手架快速创建自己的odoo应用app 前言 在上一个教程中,我们已经实现了对模块的创建,现在我们要对创建的模块添加内容,这个教程将教你如何在odoo菜单中创 ...
- 201871030118-雷云云 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客 班级链接 这个作业要求链接 作业链接 我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(2)掌握Github协作开发程序的操作方法(3)学习遗传算法 这个作 ...
- UnitFourSummary
目录 第四单元架构设计 taskOne taskTwo taskThree 四个单元架构设计与OO方法理解的演进 四个单元架构设计 UnitOne UnitTwo UnitThree UnitFour ...