博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[恢]hdu 1005
阅读量:4564 次
发布时间:2019-06-08

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

2011-12-18 03:16:34

地址:

题意:求公式的第n项。f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.

mark:矩阵乘法,快速幂。

代码:

# include 
# define REP(i,a) for(i = 0 ;i < a ; i++) void mul(int a[2][2], int b[2][2]) {
int i, j, c[2][2] ; c[0][0] = (a[0][0]*b[0][0] + a[0][1]*b[1][0]) % 7 ; c[0][1] = (a[0][0]*b[0][1] + a[0][1]*b[1][1]) % 7 ; c[1][0] = (a[1][0]*b[0][0] + a[1][1]*b[1][0]) % 7 ; c[1][1] = (a[1][0]*b[0][1] + a[1][1]*b[1][1]) % 7 ; REP(i,2) REP(j,2) a[i][j] = c[i][j] ; } void qpow(int m[2][2], int n) {
int rst[2][2] = {
1,0,0,1} ; int buff[2][2] ; int i, j ; REP(i,2)REP(j,2) buff[i][j] = m[i][j] ; while (n) {
if (n&1) mul(rst, buff) ; mul(buff, buff) ; n >>= 1 ; } REP(i,2) REP(j,2) m[i][j] = rst[i][j] ; } int main () {
int a, b, n ; int m[2][2] ; while (~scanf ("%d%d%d", &a, &b, &n) && (a||b||n)) {
if (n <= 2){puts ("1") ; continue ;} m[0][0] = 0, m[0][1] = b%7, m[1][0] = 1, m[1][1] = a%7 ; qpow(m,n-2) ; printf ("%d\n", (m[0][1] + m[1][1]) % 7) ; } return 0 ; }

转载于:https://www.cnblogs.com/lzsz1212/archive/2012/01/06/2315227.html

你可能感兴趣的文章
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
查看>>
gulp
查看>>
pgsql查询优化之模糊查询
查看>>
不变模式
查看>>
20181227 新的目标
查看>>
androidtab
查看>>
php 事件驱动 消息机制 共享内存
查看>>
剑指offer 二叉树的bfs
查看>>
LeetCode Maximum Subarray
查看>>
让我们再聊聊浏览器资源加载优化
查看>>
underscore demo
查看>>
CSS hack
查看>>
每日一小练——数值自乘递归解
查看>>
qq登陆错误提示
查看>>
bzoj 1192: [HNOI2006]鬼谷子的钱袋 思维 + 二进制
查看>>
没写完,没调完,咕咕咕的代码
查看>>
Android Studio使用技巧:导出jar包
查看>>
Problem E. TeaTree - HDU - 6430 (树的启发式合并)
查看>>
Kafka序列化和反序列化与示例
查看>>
win10下VS2010中文输入法切换为英文卡死
查看>>