问题 H: 取余运算

题目描述

输入b,p,k的值,求b^p mod k的值(即b的p次方除以k的余数)。其中b,p,k*k为32位整数。

输入

输入b,p,k的值

输出

输出b^p mod k的值

样例输入

2 10 9

样例输出

2^10 mod 9=7

方法一:

分治策略求解:

问题分析

  1. 递归方法:

    • 使用递归函数 ans 来分解幂运算,这是一种分治策略。
    • 递归方法允许将问题分解为更小的子问题,这些子问题更容易解决。
  2. 处理基本情况:

    • p 等于 1 或 2 时,有特定的返回条件,这些是递归的基本情况。
  3. 偶数和奇数幂:

    • p 是偶数时,b^p 可以分解为 (b^(p/2))^2
    • p 是奇数时,b^p 可以分解为 (b^(p/2))^2 * b
  4. 模运算的性质:

    • 利用模运算的性质 (a * b) mod k = ((a mod k) * (b mod k)) mod k 来避免中间结果过大。
  5. 递归的终止条件:

    • 递归将持续进行,直到 p 降至 1 或 2,这时可以直接计算并返回结果。
#include <bits/stdc++.h>
#define int long long // 使用长整型以支持大数运算
using namespace std;// 定义一个函数 ans 来计算 b^p mod k
int ans(int b, int p, int k) {// 如果幂 p 等于 1,直接返回 b mod kif (p == 1) {return b % k;}// 如果幂 p 等于 2,返回 b^2 mod kif (p == 2) {return b * b % k;}// 如果幂 p 是偶数if (p % 2 == 0) {// 递归计算 b^(p/2) mod kint m = ans(b, p / 2, k);// 使用模运算的性质:(a * a) mod k = (a mod k * a mod k) mod kreturn m * m % k;} else {// 如果幂 p 是奇数// 先递归计算 b^(p/2) mod kint m = ans(b, p / 2, k);// 然后再乘以 b,并进行模运算return m * m % k * b % k;}
}signed main() {int b, p, k;cin >> b >> p >> k;printf("%lld^%lld mod %lld=%lld", b, p, k, ans(b, p, k));
}

方法二:

快速幂

问题分析

快速幂算法:

使用快速幂算法来高效地分解幂运算。
快速幂算法通过二进制展开指数 p 来减少计算量。

二进制分解:

指数 p 被分解为二进制形式,算法通过迭代每个二进制位来累计结果。

迭代和模运算:

在每次迭代中,如果当前的指数位为 1,将相应的 b 的幂乘入结果。
b 每迭代一次,进行平方并取模,以保持结果在可管理的大小。

#include <bits/stdc++.h>
#define int long long // 使用长整型以支持大数运算
using namespace std;signed main() {int b, p, k;cin >> b >> p >> k; // 读取基数 b,指数 p 和模数 kint res = 1; // 初始化结果为 1int by = b, py = p; // 保存原始的 b 和 p 值,用于最后的输出// 快速幂算法while (p) {// 如果 p 的当前最低位是 1,则将当前的 b 乘入结果if (p & 1) res = res * b % k;p >>= 1; // 将 p 右移一位,等同于 p 除以 2b = b * b % k; // 将 b 平方后取模}// 输出结果printf("%lld^%lld mod %lld=%lld", by, py, k, res);
}

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

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

相关文章

Backtrader 文档学习-Strategy(中)

Backtrader 文档学习-Strategy&#xff08;中&#xff09; Strategy是BT的核心模块&#xff0c;需要慢慢摸索内部设计的流程&#xff0c;方法的用途&#xff0c;使用场景&#xff0c;还要一些常用的状态值。 本章主要介绍关于strategy的生存周期&#xff0c;notify_order方法&…

npm指令

1、npm install express&#xff1a;安装Node模块 安装完毕后会产生一个node_modules目录&#xff0c;其目录下就是安装的各个node模块。 2、npm view express&#xff1a;查看node模块的package.json文件夹 注意事项&#xff1a;如果想要查看package.json文件夹下某个标签的…

Mac启动时候出现禁止符号

Mac启动时候出现禁止符号 启动时候出现禁止符号,意味着 选定的启动磁盘 包含 Mac 操作系统&#xff0c;但它不是 您的 Mac 可以使用的 macOS 。您应该在这个磁盘上 重新安装 macOS 。 可以尝试以下苹果提供的方法&#xff1a; Mac启动时候出现禁止符号 不要轻易抹除磁盘&am…

指针和引用

指针使用操作符 "*" 和 "->"&#xff0c;引用使用操作符"."&#xff0c;他们具有相同的功能&#xff0c;都是间接的引用其他对象。 指针和引用的选择 在任何情况下都不能使用指向空值的引用&#xff0c;引用总是必须指向某些对象。如果你使…

鸡兔同笼问题加强版

描述 已知鸡和兔的总数量为 n,总腿数为 m。输入 n 和 m,依次输出鸡和兔的数目&#xff0c;如果无解&#xff0c;则输出 “No answer”(不要引号)。 输入描述 第一行输入一个数据 a,代表接下来共有几组数据&#xff0c;在接下来的 (a≤100000) a 行里&#xff0c;每行都有一个…

GhostscriptExample GS

1.导出图片 package cn.net.haotuo.pojo; import java.io.*;public class GhostscriptExample {public static void main(String[] args) { String gsPath "C:/Program Files/gs/gs9.54.0/bin/gswin64c.exe";String inputFilePath "C:\\Users\\Admini…

idea将本地编译好的代码上传到hub镜像仓库

第一步&#xff1a;编译打包本地的文件 package 第二步&#xff1a;执行docker bulid打包命令 docker build -t sunyuhua/algo-ability:1.0.0 .sunyuhuasunyuhua-HKF-WXX:~/workspace/shbgit/algo-ability$ docker build -t sunyuhua/algo-ability:1.0.0 . [] Building 141.…

C语言编译器(C语言编程软件)完全攻略

介绍常用C语言编译器的安装、配置和使用。 常用的C语言编译器&#xff08;编程软件&#xff09;介绍&#xff0c;同时附带下载地址、详细的安装教程和使用教程。我们还对比了不同C语言编译器&#xff08;C语言编程软件&#xff09;的优缺点&#xff0c;让初学者知道该如何选择…

差分电路原理以及为什么输出电压要偏移

我们在使用放大器芯片的时候&#xff0c;除了对放大器芯片本身应用外&#xff0c;通常还需要搭建一些外围电路来满足放大器芯片的使用条件&#xff0c;最终满足应用的功能&#xff0c;下面通过一个差分电路来熟悉这些应用。 差分运算放大电路&#xff0c;对共模信号得到有效抑…

微软的一些公开课,Python、机器学习、SQL、AI,全部免费

大家好&#xff0c;我是老章&#xff0c;刷X看到一位博主Alif Hossain⚡alifcoder总结了微软的一些公开课&#xff0c;全部免费&#xff0c;蛮不错的。感兴趣可以学一波&#xff0c;还能领徽章。 1. 机器学习简介 本课程是学习机器学习基础知识和用例的好方法。 → 11 个模块…

C# Image Caption

目录 介绍 效果 模型 decoder_fc_nsc.onnx encoder.onnx 项目 代码 下载 C# Image Caption 介绍 地址&#xff1a;https://github.com/ruotianluo/ImageCaptioning.pytorch I decide to sync up this repo and self-critical.pytorch. (The old master is in old ma…

实战演练 | Navicat 中编辑器设置的配置

Navicat 是一款功能强大的数据库管理工具&#xff0c;为开发人员和数据库管理员提供稳健的环境。其中&#xff0c;一个重要功能是 SQL 编辑器&#xff0c;用户可以在 SQL 编辑器中编写和执行 SQL 查询。Navicat 的编辑器设置可让用户自定义编辑器环境&#xff0c;以满足特定的团…

ejs默认配置 造成原型链污染

文章目录 ejs默认配置 造成原型链污染漏洞背景漏洞分析漏洞利用 例题 [SEETF 2023]Express JavaScript Security ejs默认配置 造成原型链污染 参考文章 漏洞背景 EJS维护者对原型链污染的问题有着很好的理解&#xff0c;并使用非常安全的函数清理他们创建的每个对象 利用Re…

鸿蒙应用中的通知

目录 1、通知流程 2、发布通知 2.1、发布基础类型通知 2.1.1、接口说明 2.1.2、普通文本类型通知 2.1.3、长文本类型通知 2.1.4、多行文本类型通知 2.1.5、图片类型通知 2.2、发布进度条类型通知 2.2.1、接口说明 2.2.2、示例 2.3、为通知添加行为意图 2.3.1、接…

Python基础知识总结1-Python基础概念搞定这一篇就够了

时隔多年不用忘却了很多&#xff0c;再次进行python的汇总总结。好记性不如烂笔头&#xff01; PYTHON基础 Python简介python是什么&#xff1f;Python特点Python应用场景Python版本和兼容问题解决方案python程序基本格式 Python程序的构成代码的组织和缩进使用\行连接符 对象…

从零学Java 内部类

Java 内部类 文章目录 Java 内部类1 什么是内部类?2 内部类的分类2.1 成员内部类2.2 静态内部类2.3 局部内部类2.4 匿名内部类 1 什么是内部类? 概念: 在一个类的内部再定义一个完整的类, 内层的类称为内部类 特点: 编译之后可生成独立的字节码文件 内部类可以访问外部类的…

解决ChatGPT4.0无法上传文件

问题描述 ChatGPT4.0&#xff1a;上传文件时出错 解决方案&#xff1a; 仔细检查文件的编码格式&#xff0c;他似乎目前只能接受utf-8的编码&#xff0c;所以把文件的编码改为UTF-8即可成功上传

【十六】【动态规划】97. 交错字符串、712. 两个字符串的最小ASCII删除和、718. 最长重复子数组,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

Hadolint:Lint Dockerfile 的完整指南

想学习如何使用 Hadolint 对 Dockerfile 进行 lint 处理吗&#xff1f;这篇博文将向您展示如何操作。这是关于 Dockerfile linting 的完整指南。 通过对 Dockerfile 进行 lint 检查&#xff0c;您可以及早发现错误和问题&#xff0c;并确保它们遵循最佳实践。 什么是Hadolint…

坐标转换 | EXCEL中批量将经纬度坐标(EPSG:4326)转换为墨卡托坐标(EPSG:3857)

1 需求 坐标系概念&#xff1a; 经纬度坐标&#xff08;EPSG:4326&#xff09;&#xff1a;WGS84坐标系&#xff08;World Geodetic System 1984&#xff09;是一种用于地球表面点的经纬度坐标系。它是美国国防部于1984年建立的&#xff0c;用于将全球地图上的点定位&#xff0…