hdu4549_M斐波那契数列 解题报告
2024-09-16 00:12:59
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 ;
}
最新文章
- jquery的几种ajax提交方式
- 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)
- opencv直线检测在c#、Android和ios下的实现方法
- Oracle RAC的日志体系
- hdu 1052 (greedy algorithm) 分类: hdoj 2015-06-18 16:49 35人阅读 评论(0) 收藏
- [under the hood]Reduce EXE and DLL Size with LIBCTINY.LIB
- Maven实战(三)Eclipse构建Maven项目
- ios 学习 广告图片轮播器
- (图 BFS)走迷宫
- 对于fmri的hrf血液动力学响应函数的一个很直观的解释-by 西南大学xulei教授
- FZU 2105-Digits Count(线段树延时标记)
- JAVA与C++的区别和联系
- Android中Cursor类的概念和用法
- NGUI 添加回调函数
- APICloud框架——总结一下最近开发APP遇到的一些问题
- C++中printf和scanf的用法
- 【浅谈web安全】大企业安全:从员工下手
- linux小白成长之路8————访问Docker中的mysql
- Git使用(二、分支的创建和上传)
- 图解Redis之数据结构篇——字典