当前位置: 首页 > news >正文

【算法】小强爱数学(迭代公式+数论取模)

文章目录

    • 1. 问题
    • 2. 输入
    • 3. 输出
    • 4. 示例
    • 5. 分析
    • 6. 思路
    • 7. 数论,取模相关公式
    • 8. 数论,同余定理
    • 9. 代码

1. 问题

小强发现当已知 x y = B xy=B xy=B以及 x + y = A x+y=A x+y=A时,能很轻易的算出 x n x_ {n} xn + y n y_ {n} yn 的值.但小强想请你在已知A和B的情况下,计算出 x + y x+y x+y的值.因为这个结果可能很大所以所有的运算都在模1e9+7下进行.

2. 输入

第一行输入一个正整数T.表示有T组数据
接下来T行, 每行输入三个整数A,B和n
1 < = T < = 100 0 < = A , B < = 1 e 9 + 7 1 < = n < = 1 e 5 1<=T<=100\\ 0<=A,B<=1e9+7\\ 1<=n<=1e5 1<=T<=1000<=A,B<=1e9+71<=n<=1e5

3. 输出

输出 T T T行,每一行表示每组数据的结果.

4. 示例

输入例子:
3
4 4 3
2 3 4
5 2 6
输出例子:
16
999999993
9009

5. 分析

本题实际上就是个数学问题,积累了递推公式雀氏很好做,否则就很操蛋

递推公式

在这里插入图片描述

证明
在这里插入图片描述

6. 思路

迭代计算,类似斐波那契。不过需要小心溢出问题。本题中,A、B的值可能不会很大,但A、B计算处理后得到的值溢出的概率极高。如果A、B均为int,那么计算时就极容易发生溢出现象,因此A、B类型设置为long

此外,最终结果需要取模,笔者额外介绍一下数论中有关取模的信息

7. 数论,取模相关公式

(a + b) % p = (a%p + b%p) %p
(a - b) % p = ((a%p - b%p) + p) %p
(a * b) % p = (a%p)*(b%p) %p

详细介绍的文章

  • 快速幂取模
  • 快速乘法取模

快速求模,其实就是运用到了取模的性质,把大的数字分部拆解为小的数字。当然拆的过程中会出现各种细节

一句话总结:拆出来的数字,都取模。切记除法、指数不要这么做


8. 数论,同余定理

如果(a - b)能够被m整除,即m | (a - b),那么a mod m = b mod m。我们称称整数a与b对模m同余,记作a≡b(mod m)

这个也好理解,a - b能够被m整除,说明a,和b mod m能够得到相同余数,只有这样,a - b才能把多余的数字去除,因此a - b才能被m整除

详细介绍的文章

  • 同余定理

9. 代码

import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {static final int mod = 1000000000 + 7;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int T = sc.nextInt(), n;long A, B; for (int i = 0; i < T; ++i) {A = sc.nextInt(); B = sc.nextInt(); n = sc.nextInt();long[] dp = new long[n + 1];dp[1] = A % mod; // 为了防止溢出,注意取模。具体公式上文有讲dp[2] = (A * A % mod - 2 * B % mod + mod) % mod;if (n == 1) {System.out.println(dp[1]);}else if (n == 2) {System.out.println(dp[2]);}else {for (int j = 3; j <= n; ++j) {dp[j] = (A * dp[j - 1] % mod - B * dp[j - 2] % mod + mod) % mod;}System.out.println(dp[n]);}}}
}

在这里插入图片描述

相关文章:

  • Unity学习笔记 6.2D换帧动画
  • Java后端八股----JVM篇
  • RuoYi-Vue-Plus(基础知识点jackson、mybatisplus、redis)
  • 十.pandas方法总结Numpy
  • 数据结构——双向链表(C语言版)
  • 20.Python从入门到精通—参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
  • 20240318-2-推荐算法Graph_Embedding
  • C++ 的标准模板库(STL)常用算法介绍
  • 微信小程序事件处理
  • 操作系统内功篇:硬件结构之软中断
  • 树形递归模板
  • 面试算法-88-反转链表
  • 【软件测试_黑白盒测试】白盒测试黑盒测试 区别
  • window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)
  • [Repo Git] manifests的写法
  • [译]Python中的类属性与实例属性的区别
  • 《剑指offer》分解让复杂问题更简单
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 345-反转字符串中的元音字母
  • Android交互
  • codis proxy处理流程
  • eclipse(luna)创建web工程
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • KMP算法及优化
  • Python语法速览与机器学习开发环境搭建
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 缓存与缓冲
  • 判断客户端类型,Android,iOS,PC
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我建了一个叫Hello World的项目
  • 异步
  • 译有关态射的一切
  • 主流的CSS水平和垂直居中技术大全
  • Python 之网络式编程
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 数据可视化之下发图实践
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • !$boo在php中什么意思,php前戏
  • #stm32驱动外设模块总结w5500模块
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)事件处理——(7)简单事件(Simple events)
  • (ZT)一个美国文科博士的YardLife
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (南京观海微电子)——I3C协议介绍
  • (新)网络工程师考点串讲与真题详解
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)linux 命令大全
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)