博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOI2013 矩阵游戏 【数论】
阅读量:4358 次
发布时间:2019-06-07

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

题目描述

婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储)。她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下面的递推式:

F[1][1]=1

F[i,j]=a*F[i][j-1]+b (j!=1)

F[i,1]=c*F[i-1][m]+d (i!=1)

递推式中a,b,c,d都是给定的常数。

现在婷婷想知道F[n][m]的值是多少,请你帮助她。由于最终结果可能很大,你只需要输出F[n][m]除以1,000,000,007的余数。

输入输出格式

输入格式:

输入文件matrix.in包含一行有六个整数n,m,a,b,c,d。意义如题所述。

输出格式:

输出文件matrix.out包含一个整数,表示F[n][m]除以1,000,000,007的余数。

输入输出样例

输入样例#1:

3 4 1 3 2 6
输出样例#1:

85

说明

【样例1说明】

样例中的矩阵为:

1 4 7 10

26 29 32 35

76 79 82 85

数据范围

题解

我们从f[n][m]往前推导,最终可以推出:
x = a^(m - 1) * c
y = a^(m - 1) * d
p = b * (a^(m - 1) - 1) / (a - 1)
q = (x^(n - 1) - 1) / (x - 1)
则结果为
ans = x^(n - 1) * (a^(m - 1) + p) + (y + p) * q;
由于指数非常大,我们运用费马小定理a^(p - 1) ≡ 1 (mod p)
a^(m - 1) ≡ a^((m - 1) mod (p - 1)) (mod p)
还有p,q的实质与等比数列有关,若公比为1,要特判一下
然后就A了~~
通过这题加深了对费马小定理的理解
#include
#include
#include
#include
#define LL long long intusing namespace std;const int maxn = 100005,maxm = 100005,INF = 2000000000;const LL P = 1000000007;void getread(LL& out,LL& out2){ char c = getchar(); out = out2 = 0; LL mod = P - 1; while (c < 48 || c > 57) c = getchar(); while (c >= 48 && c <= 57){ out = out * 10 + c - '0'; out2 = out2 * 10 + c - '0'; out %= mod; out2 %= P; c = getchar(); } out = (out - 1 + mod) % mod; out2 = (out2 - 1 + P) % P;}inline LL qpow(LL a,LL b){ int ans = 1; for (; b; b >>= 1,a = a * a %P) if (b & 1) ans = ans * a % P; return ans;}int main(){ LL n_1,m_1,n,m,a,b,c,d,p,q,x,y; getread(n_1,n); getread(m_1,m); cin>>a>>b>>c>>d; LL am_1 = qpow(a,m_1); if (a == 1) p = b * m % P; else p = b * (am_1 - 1) % P * qpow(a - 1,P - 2) % P; x = am_1 * c % P; y = am_1 * d % P; if (x == 1) q = n; else q = (qpow(x,n_1) - 1 + P) % P * qpow(x - 1,P - 2) % P; LL ans = ((qpow(x,n_1) * ((am_1 + p) % P) % P + (y + p) % P * q % P) % P + P) % P; cout<
<

转载于:https://www.cnblogs.com/Mychael/p/8282859.html

你可能感兴趣的文章
ASP.NET XML与JSON
查看>>
java.lang.Class.getResource()这哥个方法主要是做什么用
查看>>
Codeforces 948D Perfect Security 【01字典树】
查看>>
android中通过ServerSocket创建端口问题
查看>>
fieldset、legend、display html元素
查看>>
IntelliJ IDEA 14.x 与 Tomcat 集成,创建并运行Java Web项目
查看>>
JavaWeb学习-Tomcat
查看>>
MySQL 事务与锁机制
查看>>
优秀程序员==工作时间长的程序员么?
查看>>
docker学习笔记2:容器操作
查看>>
深入浅出设计模式——访问者模式(Visitor Pattern)
查看>>
【转载】zookeeper 分布式锁 实现
查看>>
SQL语法
查看>>
Django(三) ORM 数据库操作
查看>>
【转】iOS静态库 【.a 和framework】【超详细】
查看>>
【转】Android中自定义控件的步骤
查看>>
软件测试工作中的沟通问题
查看>>
format 的用法,9*9乘法表
查看>>
mysql--5
查看>>
uva11214 Guarding the Chessboard
查看>>