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

文章目录

    • 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]);}}}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程生活day1--个位数统计、考试座位号、A-B、计算阶乘和

个位数统计 题目描述&#xff1a; 定一个 k 位整数 Ndk−1​10k−1⋯d1​101d0​ (0≤di​≤9, i0,⋯,k−1, dk−1​>0)&#xff0c;请编写程序统计每种不同的个位数字出现的次数。例如&#xff1a;给定 N100311&#xff0c;则有 2 个 0&#xff0c;3 个 1&#xff0c;和 …

NAA参数放到哪个数据结构中,有什么作用

在eUICC配置文件包中&#xff0c;NAA&#xff08;Network Access Application&#xff09;参数通常放置在特定的ProfileElement中&#xff0c;这个ProfileElement被称为PE-AKAParameter或PE-CDMAParameter&#xff0c;具体取决于所使用的认证算法类型。这些参数对于设置和配置N…

当贝的操作系统

当贝盒子是什么&#xff1f; 当贝盒子&#xff08;Dangbei Box&#xff09;是一款基于 Android 系统定制的智能电视盒子&#xff0c;主要用于连接到电视上&#xff0c;提供丰富的视频、音乐、游戏等娱乐内容。当贝盒子通常配备了强大的硬件性能和定制的用户界面&#xff0c;以更…

Linux线程补充之——同步

一、Linux线程同步 ​ 同步是相对于竞争的概念&#xff1b; ​ 同步就是在保证安全的前提下啊&#xff0c;按照一定的顺序访问临界资源&#xff1b; ​ 所有的资源一定是先访问的临界资源&#xff0c;申请失败然后才进行排队的&#xff1b;互斥锁保证的是来访问的进程只允许…

《边缘计算:连接未来的智慧之桥》

随着物联网、5G等技术的快速发展&#xff0c;边缘计算作为一种新兴的计算模式&#xff0c;正逐渐引起人们的广泛关注。边缘计算通过将数据处理和存储功能放置在距离数据产生源头更近的位置&#xff0c;实现了更快速、更可靠的数据处理和交换&#xff0c;为各行各业带来了前所未…

jasmine学习(二)--API

jasmine基本结构&#xff1a; describe(当前测试标题/描述 , ()>{let num &#xff1a; number;beforeEach(()>{// 这个是在每个it之前执行的num 0;num 1;});afterEach(()>{// 每个it之后执行的num 0;});it(该测试用例要测试的内容文本描述, ()>{expect(true).t…

【项目设计】基于MVC的负载均衡式的在线OJ

项目代码&#xff08;可直接下载运行&#xff09; 一、项目的相关背景 学习编程的小伙伴&#xff0c;大家对力扣、牛客或其他在线编程的网站一定都不陌生&#xff0c;这些编程网站除了提供了在线编程&#xff0c;还有其他的一些功能。我们这个项目只是做出能够在线编程的功能。…

详解JavaScript中this指向

this 原理 this 是一个指针型变量&#xff0c;它指向当前函数的运行环境。 1.内存的数据结构 var obj { foo: 5 };2.函数 var obj { foo: function () {} };引擎会将函数单独保存在内存中&#xff0c;然后再将函数的地址赋值给foo属性的value属性。 由于函数是一个单独的…

代码随想录day28(1)二叉树:二叉搜索树中的插入操作(leetcode701)

题目要求&#xff1a;给定二叉搜索树&#xff08;BST&#xff09;的根节点和要插入树中的值&#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证&#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 思路&#xff1a;对于二叉搜索树来说&…

【深度解析算法】散列表 上

8 散列表 如果所有的键都是小整数&#xff0c;我们可以用一个数组来实现无序的符号表&#xff0c;将键作为数组的索引而数组中键i处储存的就是它对应的值。这样我们就可以快速访问任意键的值。在本节中我们将要学习散列表。它是这种简易方法的扩展并能够处理更加复杂的类型的键…

常见技术难点及方案

1. 分布式锁 1.1 难点 1.1.1 锁延期 同一时间内不允许多个客户端同时获得锁&#xff1b; 1.1.2 防止死锁 需要确保在任何故障场景下&#xff0c;都不会出现死锁&#xff1b; 1.2.3 可重入 特殊的锁机制&#xff0c;它允许同一个线程多次获取同一个锁而不会被阻塞。 1.2…

Web前端Html的表单

表单的关键字&#xff1a; form标签表示一个表单区域 action“后端地址” method“提交数据方式:get/post” input 单行输入框 type“text” 文本 name“定义名称 名字自定义” 向后端提交的键 readonly“readonly” 只读&#xff0c;不可修改&#xff0c;但是可以提交 disab…

C语言学习-day22-函数递归1

程序调用自身的编程技巧被称为递归。举个例子&#xff1a; int main() { printf("hehe\n"); main(); return 0; } 比如这种&#xff0c;自己调用自己后每次都打印一个hehe。 递归的核心思考方式在于&#xff1a;大事化小。 做个练习&#xff1a;接收一个整型值&a…

鸿蒙Harmony应用开发—ArkTS-类型定义

说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Resource 资源引用类型&#xff0c;用于设置组件属性的值。 可以通过$r或者$rawfile创建Resource类型对象&#xff0c;不可以修改Res…

【S056】Clause46--XGMII接口摘要

文章目录 XGMII数据与lane的对应关系是什么&#xff1f;XGMII上的数据流格式是什么&#xff1f;如何保证0xFB每次都在Lane0&#xff1f;方法一&#xff1a;方法二&#xff1a; Link Fault信号 XGMII数据与lane的对应关系是什么&#xff1f; XGMII上的数据流格式是什么&#xff…

GDC期间LayaAir启动全球化战略

3 月 18 日至 3 月 22 日&#xff0c;一年一度的游戏开发者大会&#xff08;GDC&#xff09;在美国旧金山举行。在此期间&#xff0c;Layabox宣布LayaAir引擎启动全球扩张战略&#xff0c;这标志着引擎将步入快速发展的新阶段。此举旨在利用公司先进的3D引擎技术&#xff0c;将…

Linux之git

一、什么叫做版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发项目的技…

Affiliate Stores: 建立营销联盟商店的详细教程- US Domain Center主机

第一步&#xff1a;了解营销联盟商店 营销联盟商店是一种电子商务模式&#xff0c;您可以在其中通过推广其他企业的产品或服务来赚取佣金。您在自己的网站上展示其他企业的产品&#xff0c;并在买家购买时获得佣金。通过 WooCommerce 平台&#xff0c;您可以轻松创建一个营销联…

学习总结!

java目前学习到了数组部分 广搜&#xff0c;在开始的时候把#处理一下会好做很多&#xff0c;遇到上下两层都是# 的&#xff0c;就把上下两层的这个位置都弄成墙就行。还有遇到 一层是#&#xff0c;一层是墙的。也直接把俩都弄城墙就行&#xff0c;省的要判断他撞死&#xff0c;…

vue2的v-model不更新

场景 动态生成组件时&#xff0c;动态为表单添加属性&#xff0c;同时使用v-model以数组形式访问表单属性。通过监听表单对象&#xff0c;发现并未实施更新。 原因 vue2无法监听数组索引一系列操作&#xff0c;从而不能及时响应。vue2是通过Object.definePropertys实现响应式的…