hdu4549_M斐波那契数列 解题报告
Solution:
1.快速幂:数/矩阵
2.以证明1000000007是素数。
费马小定理:
若p是素数,gcd(a,p)=1,则a^(p-1)
1(mod p)。
若a^b mod p 中b很大,则可以简化为a^b mod p=a^[b mod (p-1)] mod p
证明如下:
b=t*(p-1)+r,其中r为b除以(p-1)的余数,即为b mod (p-1)。
a^b=(a^(p-1))^t * a^r
1^t * a^r
a^r (mod p)
费马小定理的推广:如果p为质数,xp-x(x是任意正整数)必能被p整除
注意是对b,对结果分别是取模(p-1),取模p;不要同时取模p或同时取模(p-1)!
#include <stdio.h>
#include <stdlib.h> #define yu_ 1000000006
#define yu 1000000007 int main()
{
//f[n]=a^x(n-1)*b^x(n)
//a^f(n-1) = a^(f(n-1)%1000000006) (mod 1000000007)
//1000000007 is a prime
long n,nn,w,i,c[];
__int64 x[],y[],u[],v[],p,q,s,t,pp,qq,ss,tt,a,b,result;
x[]=;
y[]=;
u[]=;
v[]=;
for (i=;i<;i++)
{
x[i]=(x[i-]*x[i-]+y[i-]*u[i-])%yu_;
y[i]=(y[i-]*(x[i-]+v[i-]))%yu_;
u[i]=(u[i-]*(x[i-]+v[i-]))%yu_;
v[i]=(y[i-]*u[i-]+v[i-]*v[i-])%yu_;
}
while (scanf("%ld%ld%ld",&c[],&c[],&n)!=EOF)
{
if (n==)
{
printf("%ld\n",c[]);
continue;
}
else if (n==)
{
printf("%ld\n",c[]);
continue;
}
result=;
for (i=;i<;i++)
{
p=;
q=;
s=;
t=;
//a:n-2 b:n-1
nn=n+i-;
w=;
while (nn)
{
if ((nn & )==)
{
pp=p;
qq=q;
ss=s;
tt=t;
p=(pp*x[w]+qq*u[w])%yu_;
q=(pp*y[w]+qq*v[w])%yu_;
s=(ss*x[w]+tt*u[w])%yu_;
t=(ss*y[w]+tt*v[w])%yu_;
}
w++;
nn>>=;
}
//f(n)/f(n+1)
p=(p+q)%yu_;
a=;
b=c[i];
while (p)
{
if ((p & )==)
a=(a*b)%yu;
p>>=;
b=(b*b)%yu;
}
result=(result*a)%yu;
}
printf("%I64d\n",result);
}
return ;
}
hdu4549_M斐波那契数列 解题报告的更多相关文章
- 【剑指Offer】10- I. 斐波那契数列 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人微信公众号:负雪明烛 目录 题目描述 解题方法 递归 动态规划 日期 题目地址:htt ...
- 「洛谷P1306」斐波那契公约数 解题报告
P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很"简单"问题:第n项和第m项的最大公 ...
- 洛谷 P1306 斐波那契公约数 解题报告
P1306 斐波那契公约数 题意:求\(Fibonacci\)数列第\(n\)项和第\(m\)项的最大公约数的最后8位. 数据范围:\(1<=n,m<=10^9\) 一些很有趣的性质 引理 ...
- 【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现
最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考 话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的, ...
- hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
解题思路: 一只母猪生下第二头后立马被杀掉,可以这样想即,生下第二头便被杀掉,可以看成母猪数量没变 第一天 1 第二天 2 第三天 3 :第一头生第二头后杀掉还是1头,第二头再加上第二头生下的,一共三 ...
- Python(迭代器 生成器 装饰器 递归 斐波那契数列)
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- lintcode:Fibonacci 斐波纳契数列
题目: 斐波纳契数列 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, ...
- 斐波那契数列(C#)
斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:1.1.2.3.5.8.13 ...
- 算法 递归 迭代 动态规划 斐波那契数列 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
随机推荐
- TomCat 再次发布我的程序
打包成.war的步骤就不说了,之后的配置和上一次的不一样. 在Tomcat的conf下的server.xml文件中,重新配置如下 <Service name="xfwweb" ...
- 分布式监控系统Zabbix-批量添加聚合图形
之前部署了Zabbix(3.4.4版本)监控环境,由于主机比较多,分的主机组也比较多,添加聚合图形比较麻烦,故采用python脚本进行批量添加聚合图形.脚本下载地址:https://pan.baidu ...
- tomcate+keepalived配置双机热备
环境清单: 应用1:192.168.51.101 应用2:192.168.51.75 虚拟IP:192.168.51.179 一.安装Tomcat(参照其他文档): 二.部署应用,并修改响应的端口(9 ...
- B. Math
链接 [http://codeforces.com/contest/1062/problem/B] 题意 给你n,有两种操作要么乘以某个数,要么开根但必须开根后是整数才能开,问你最后能变成最小的数是多 ...
- VS2013软件的安装和单元测试
VS2013是什么? 微软在Builder 2013开发者大会上发布了Visual Studio 2013预览版,并且发布其程序组件库.NET 4.5.1的预览版.该软件已于北京时间2013年11月1 ...
- Linux实践三:程序破解
一.汇编指令机器码 二.反汇编与十六进制编程器 三.可执行文件的基本格式 hexdump -x login 用16进制数字显示login内容 objdump -x login 显示login中各个段以 ...
- <构建之法>13-17
13章软件测试. 从基本名词到软件测试的分类方法,啃完这15页书,至少对与软件测试的理解程度不是停留在以前的层次(让用户使用,然后提出碰到什么问题) 测试不是那么简单就阐述的完全.测试按测试目的分类可 ...
- 二维数组转化为一维数组 contact 与apply 的结合
将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...
- hive web界面管理
老版本使用 访问<Hive Server Address>:9999/hwi 1.首先下载对应版本的src文件,本机使用apache-hive-1.2.2-src.tar.gz 2.解压缩 ...
- 使用ssh config配置文件来管理ssh连接
我本人其实及其烦使用配置文件这种东西,有时候看到巨大又复杂的配置文件,甚至复杂过代码的时候,总感觉设计配置文件的人有些本末倒置. 但是ssh这个配置文件真的非常简单好用,让我稍微体验了一次配置文件使用 ...