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 ...
随机推荐
- JavaScript初级学习
1. JavaScript的介绍 前身是LiveScript+JavaScript JavaScript(js)是一个脚本语言 基于浏览器的脚本语言 基于对象,面向对象的一个编程语言 2. EcmaS ...
- 反射的常用API
反射的常用API 加载程序集 Assembly assembly = Assembly.Load("程序集名称"); // 从前目录加载程序集,提供程序集名称,无后缀 Assemb ...
- 谈一谈C#的事件
谈一谈C#的事件 C#中事件基于委托,要理解事件要先理解委托,如果觉得自己关于委托不是很了解可以看看我前面写委托的文章 事件基于委托,是一种功能受限的委托,为委托提供了一种发布/订阅机制 使用委托时, ...
- roarctf_2019_realloc_magic
目录 roarctf_2019_realloc_magic 总结 题目分析 checksec 函数分析 解题思路 初步解题思路 存在的问题 问题解决方案 最终解决思路 编写exp exp说明 roar ...
- 大数据实战-Hive-技巧实战
1.union 和 union all 前者可以去重 select sex,address from test where dt='20210218' union all select sex,add ...
- Centos mini系统下的Hadoop集群搭建
1.事前了解 1.1 Hadoop 百度百科:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin Hadoop是一个由Apache基金会所开发 ...
- Python基础之:Python中的异常和错误
目录 简介 Python中的内置异常类 语法错误 异常 异常处理 抛出异常 异常链 自定义异常 finally 简介 和其他的语言一样,Python中也有异常和错误.在 Python 中,所有异常都是 ...
- elasticsearch 7.7 配置文件:elasticsearch.yml
# ======================== Elasticsearch Configuration ========================= # # NOTE: Elasticse ...
- 学习笔记-vue hash模式打包
1.打包设置config->index.js 2.图片资源路径出现问题 设置下utils.js文件
- 将Java编译为本地代码
将Java编译为本地代码 通常Java程序的执行流程为:将Java代码编译为Byte Code(字节码),然后JVM执行引擎执行编译好的Byte Code.这是一种中间语言的特性,它的好处就是可以做到 ...