博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qbxt 模拟赛 Day4 T2 gcd(矩阵乘法快速幂)
阅读量:5015 次
发布时间:2019-06-12

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

这里写图片描述

这里写图片描述

/*矩阵乘法+快速幂.一开始迷之题意.. 这个gcd有个规律.a bb c=a*x+b(x为常数).然后要使b+c最小的话.那x就等于1咯.那么问题转化为求a bb a+b就是斐波那契了....*/#include
#include
#define MAXN 3#define LL long long#define mod 1000000007using namespace std;LL n;LL a[MAXN][MAXN],ans[MAXN][MAXN],c[MAXN][MAXN],b[MAXN][MAXN];LL read(){ LL x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') {
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar(); return x*f;}void mi(LL n){ while(n) { if(n&1) { for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) c[i][j]=(c[i][j]+ans[i][k]*b[k][j]%mod)%mod; for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) ans[i][j]=c[i][j],c[i][j]=0; } for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) c[i][j]=(c[i][j]+b[i][k]*b[k][j]%mod)%mod; for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) b[i][j]=c[i][j],c[i][j]=0; n>>=1; }}void slove(){ b[1][2]=ans[1][2]=1,b[2][1]=ans[2][1]=1; b[1][1]=ans[1][1]=0; b[2][2]=ans[2][2]=1; mi(n); ans[1][2]%=mod,ans[2][2]%=mod; printf("%d ",min(ans[1][2],ans[2][2])); printf("%d",max(ans[1][2],ans[2][2]));}int main(){ freopen("gcd.in","r",stdin); freopen("gcd.out","w",stdout); n=read(); if(n==1) printf("1 1\n"); else slove(); return 0;}

转载于:https://www.cnblogs.com/nancheng58/p/10068204.html

你可能感兴趣的文章
三层架构(我的理解及详细分析)
查看>>
Django模板语言相关内容
查看>>
前端开发工程师如何在2013年里提升自己【转】--2016已更新升级很多何去何从?...
查看>>
markdown语法测试集合
查看>>
running and coding
查看>>
实现QQ第三方登录、网站接入
查看>>
HTML CSS 层叠样式表 三
查看>>
Qt pro pri 文件学习1
查看>>
软件工程概论第六周学习进度条
查看>>
[思路]导入导出功能
查看>>
【iOS】UICollectionView自己定义Layout之蜂窝布局
查看>>
golang——(strings包)常用字符串操作函数
查看>>
发布aar到jcenter
查看>>
跨浏览器问题的五种解决方案
查看>>
XPath定位时,使用文本的方法小技巧。
查看>>
安装pandas报错(AttributeError: 'module' object has no attribute 'main')
查看>>
ch02 fundamental definition 01
查看>>
JSON解析
查看>>
Position is everything?(css定位学习的一些心得)(一)
查看>>
如何提高编程水平
查看>>