博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10229 Modular Fibonacci
阅读量:6804 次
发布时间:2019-06-26

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

UVA_10229

    将斐波那契数用矩阵形式表示,然后再做快速幂取模即可。

#include
#include
#define MAXD 50 long long int N, M, D, a[MAXD][4], b[4]; void pow_mod(long long int n, int e) {
if(n == 1) {
a[e][0] = a[e][1] = a[e][2] = 1; a[e][3] = 0; return ; } pow_mod(n / 2, e + 1); a[e][0] = (a[e + 1][0] * a[e + 1][0] + a[e + 1][1] * a[e + 1][2]) % D; a[e][1] = (a[e + 1][0] * a[e + 1][1] + a[e + 1][1] * a[e + 1][3]) % D; a[e][2] = (a[e + 1][2] * a[e + 1][0] + a[e + 1][3] * a[e + 1][2]) % D; a[e][3] = (a[e + 1][2] * a[e + 1][1] + a[e + 1][3] * a[e + 1][3]) % D; if(n % 2) {
b[0] = (a[e][0] * a[0][0] + a[e][1] * a[0][2]) % D; b[1] = (a[e][0] * a[0][1] + a[e][1] * a[0][3]) % D; b[2] = (a[e][2] * a[0][0] + a[e][3] * a[0][2]) % D; b[3] = (a[e][2] * a[0][1] + a[e][3] * a[0][3]) % D; a[e][0] = b[0], a[e][1] = b[1], a[e][2] = b[2], a[e][3] = b[3]; } } void solve() {
int i; D = 1; for(i = 0; i < M; i ++) D <<= 1; pow_mod(N - 1, 1); printf("%lld\n", a[1][0]); } int main() {
a[0][0] = a[0][1] = a[0][2] = 1; a[0][3] = 0; while(scanf("%lld%lld", &N, &M) == 2) {
if(N == 0 || M == 0) printf("0\n"); else if(N == 1) printf("1\n"); else solve(); } return 0; }

转载地址:http://bhjwl.baihongyu.com/

你可能感兴趣的文章
[翻译]通往T-SQL的楼梯
查看>>
Oracle计算时间差函数
查看>>
django-pure-pagination使用方法
查看>>
ubuantu 18.04 LTS 版本解决网易云安装启动问题
查看>>
Java分享笔记:泛型类的定义与使用
查看>>
springCloud全实战超详细代码demo+笔记
查看>>
Golang 知识点总结
查看>>
Bitmap
查看>>
(转)arcgis面状文件坐标导出方法
查看>>
LPC824 周立功AM824学习笔记
查看>>
SQL数据库学习之路(三)
查看>>
开发https应用
查看>>
js轮换广告
查看>>
墨菲定律
查看>>
Maven
查看>>
MovieReview—Kingsman THE SECRET SERVICE(王牌特工之特工学院)
查看>>
C语言成长学习题(九)
查看>>
银行里的迷宫
查看>>
codevs——1294 全排列
查看>>
9.13模拟试题
查看>>