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

news2024/11/14 9:02:16

文章目录

    • 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.coloradmin.cn/o/1539247.html

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

相关文章

【No.16】蓝桥杯动态规划下|线性DP装箱问题|计数DP0/1背包的方案数|过河卒|完全背包小明的背包2|最长公共子序列|蓝桥骑士|推荐练习题(C++)

线性DP&#xff0c;0/1背包简化版&#xff0c;装箱问题 【题目描述】有一个箱子容量为V(正整数&#xff0c; 0 ≤ V ≤ 20000 0 \le V \le 20000 0≤V≤20000)&#xff0c;同时有n个物品( 0 < n ≤ 30 0 < n \le 30 0<n≤30)&#xff0c;每个物品有一个体积(正整数)。…

ubuntu20.04安裝輸入法

文章目录 前言一、操作過程1、安装fcitx-googlepinyin2、配置language support 前言 參考文獻 一、操作過程 1、安装fcitx-googlepinyin sudo apt-get install fcitx-googlepinyin2、配置language support 第一次點擊進去&#xff0c;會讓你安裝 點擊ctrl和空格切換中英文…

Gin入门指南:从零开始快速掌握Go Web框架Gin

官网:https://gin-gonic.com/ GitHub:https://github.com/gin-gonic 了解 Gin Gin 是一个使用 Go 语言开发的 Web 框架,它非常轻量级且具有高性能。Gin 提供了快速构建 Web 应用程序所需的基本功能和丰富的中间件支持。 以下是 Gin 框架的一些特点和功能: 快速而高效:…

000_coolprop_in_matlab在Matlab中使用CoolProp

在Matlab中使用CoolProp 简介 CoolProp是一个开源的热力学性质库&#xff0c;可以计算多种流体的热力学性质。CoolProp支持多种编程语言&#xff0c;包括Python、C、Matlab等。本文将介绍如何在Matlab中使用CoolProp。 CoolProp官网 本文所使用的Matlab版本为R2021a。 在Ma…

Zabbix与Prometheus区别简述

Zabbix与Prometheus区别简述 历史沿革 一、监控工具简介 1、Zabbix https://www.zabbix.com/cn/download Zabbix是传统的监控系统&#xff0c;出现比云原生早&#xff0c;使用的是SQL关系型数据库&#xff1b;开源监控软件&#xff0c;遵守 GPLv2开源协议&#xff0c;起源于…

为什么说 C/C++ 不适合做 Web 开发?

Web开发是当今信息技术领域的重要组成部分&#xff0c;涉及创建、维护和优化供浏览器访问的网站和应用程序。在众多编程语言中&#xff0c;C/C因其高效、灵活和接近硬件的特性而备受推崇&#xff0c;但在Web开发领域&#xff0c;它们并不被视为首选工具。本文将从以下几个方面探…

Linux Sftp和Scp

scp 和 sftp 区别 1 scp 能将远程文件复制到另一个远程机&#xff0c;sftp 不能。sftp为 SSH的其中一部分&#xff0c;是一种传输档案至 Blogger 伺服器的安全方式 2.scp 没有删除/创建远程目录功能&#xff0c;sftp 有。scp 在需要进行验证时会要求你输入密码或口令。 3. FT…

【算法】回溯与深搜

方法论 1.构建决策树 2.设计代码&#xff1a;全局变量、dfs函数 3.剪枝&#xff0c;回溯 全排列 给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff…

力扣---随机链表的复制

给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

进程和线程的关系与区别

目录&#xff1a; 导言&#xff1a; 正文&#xff1a; 一.进程 1.概念 2.进程控制块&#xff08;Process Control Block&#xff0c;PCB) 3.状态 4.优缺点 二.线程 1.概念 2.线程的设计理由与优点 3.缺点 三.进程与线程的区别与联系 导言&#xff1a; 在现代计算机…

ctf__

title: ctf 2.题目类别 3.题目的细分 4.例题 misc 0x05. 明文攻击 明文攻击是一种较为高效的攻击手段&#xff0c;大致原理是当你不知道一个zip的密码&#xff0c;但是你有zip中的一个已知文件&#xff08;文件大小要大于12Byte&#xff09;时&#xff0c;因为同一个zip压缩…

java数据结构与算法刷题-----LeetCode215. 数组中的第K个最大元素

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路&#xff1a;时间复杂度O( n n n)&#xff0c;空间复杂度…

大屏可视化综合展示解决方案

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.…

STM32 CAN的位时序和波特率

STM32 CAN的位时序和波特率 位时序 STM32的CAN外设位时序中只包含3段&#xff0c;分别是同步段SYNC_SEG、位段BS1及位段BS2&#xff0c;采样点位于BS1及BS2段的交界处。其中SYNC_SEG段固定长度为1Tq&#xff0c;而BS1及BS2段可以在位时序寄存器CAN_BTR设置它们的时间长度&…

CISP 4.2备考之《安全支撑技术》知识点总结

文章目录 第一节 密码技术第二节 标识和身份鉴别技术第三节 访问控制技术 第一节 密码技术 密码学发展阶段&#xff1a;古典、近代、现代和公钥密码学及特点。 密码系统组成&#xff1a;明文、加密、密钥、解密、密文。 柯克霍夫原则&#xff1a;密钥保密&#xff0c;算法公开…

Stable Diffusion 本地训练端口与云端训练端口冲突解决办法

方法之一&#xff0c;修改本地训练所用的端口 1 首先&#xff0c;进入脚本训练器的根目录 例如&#xff1a;C:\MarkDeng\lora-scripts-v1.7.3 找到gui.py 2 修改端口号 因为云端训练器也是占用28000和6006端口 那么本地改成27999和6007也是可以的 保存退出&#xff0c;运行启动…

NX二次开发常用函数:UF_MODL_ask_feat_......(一)

最近学习NX二次开发发现有一些函数经常使用&#xff0c;俗话说得好&#xff0c;好记性不如烂笔头&#xff0c;现在做一下笔记&#xff0c;帮助理解。 UF_MODL_ask_feat_......所在头文件uf_modl.h 1、UF_MODL_ask_feat_body&#xff08;通过特征查询体&#xff09; 概述&…

liunx centos7 下通过yum删除安装已经安装的php

执行下面命令查看php相关的包 rpm -qa | grep php 只需要卸载几个名为common的包即可&#xff0c;其他同版本依赖会被全部删除&#xff0c;删除php71w-common&#xff0c;71w版本的依赖包全部会被删除。 查看php包的命令 rpm -qa | grep php 或 yum list installed | gre…

鸿蒙APP应用开发教程—超详细的项目结构说明

1. 新建项目 打开DevEco Studio, 选择 Create Project: 1.1 选择模版 Create Project - Choose Template 1.2 配置项目 Create Project - Configure Project 如果使用的是 DevEco 3.X 版本, 可以根据 Compile SDK版本选择不同的模式, 比如: 3.0.0(API 8)及更早 - 仅支持 …

Docker-Image

Docker Docker 镜像是什么为什么需要镜像镜像命令总览docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker image inspectdocker historydocker importdocker image prunedocker build Docker 镜像是什么 Docker image 本质上是一个 read-on…