博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1306 斐波那契公约数(ksm+结论)
阅读量:5010 次
发布时间:2019-06-12

本文共 1217 字,大约阅读时间需要 4 分钟。

题目描述

对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少?

Update:加入了一组数据。

输入输出格式

输入格式:

 

两个正整数n和m。(n,m<=10^9)

注意:数据很大

 

输出格式:

 

Fn和Fm的最大公约数。

由于看了大数字就头晕,所以只要输出最后的8位数字就可以了。

 

输入输出样例

输入样例#1: 
4 7
输出样例#1: 
1 结论:gcd(F[n],F[m])=F[gcd(n,m)] 就是一个ksm了 代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mod 100000000const int maxn=1e5+5;typedef long long ll;using namespace std;struct mat{ ll a[5][5]; };mat mul(mat x,mat y){ mat ans; memset(ans.a,0,sizeof(ans.a)); for(int i=0;i<2;i++) { for(int j=0;j<2;j++) { for(int k=0;k<2;k++) { ans.a[i][j]=(ans.a[i][j]+x.a[i][k]*y.a[k][j])%mod; } } } return ans;}mat ans;ll ksm(int x){ mat res; res.a[0][0]=1; res.a[0][1]=1; res.a[1][0]=1; res.a[1][1]=0; while(x) { if(x&1) { ans=mul(ans,res); } x>>=1; res=mul(res,res); } return ans.a[0][0]%mod;}int main(){ int n,m; cin>>n>>m; int x=__gcd(n,m); memset(ans.a,0,sizeof(ans.a)); ans.a[0][0]=1; ans.a[1][0]=1; ll answer=ksm(x-1); printf("%lld\n",answer); return 0;}

 

转载于:https://www.cnblogs.com/Staceyacm/p/11219583.html

你可能感兴趣的文章
MySQL的随机数函数rand()的使用技巧
查看>>
thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误
查看>>
python字符串实战
查看>>
wyh的物品(二分)
查看>>
12: xlrd 处理Excel文件
查看>>
综合练习:词频统计
查看>>
中文url编码乱码问题归纳整理一
查看>>
Cesium应用篇:3控件(3)SelectionIndicator& InfoBox
查看>>
58. Length of Last Word(js)
查看>>
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
任务13:在Core Mvc中使用Options
查看>>
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>
Sort Colors
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>
Mvc--Html.ActionLink()的用法
查看>>