数据结构与算法学习-快速幂取模

我的算法修炼之路--6 ——模幂、构造、背包、贪心、剪枝、堆维护六题精析 本期涉及算法: 数学(可取模的快速幂),构造(图),01背包(问题转化),贪心算法,dfs暴搜+剪枝,模拟+小根堆维护最小值。 题目清单 1.转圈游戏 2.System Administrator(系统管理员) 3.多米诺骨牌 4.排队接水 5.健康的荷斯坦奶牛 6.接水问题 这些题目摘录于洛谷,好题,典型的题,考察各类算法运用,可用于蓝桥杯及各类算法比赛备战,算法题目练习,提高算法能力,补充知识,提升思维。 锻炼解题思路,从学会算法模板后,会分析,用到具体的题目上。 对应题目点链接即可做。 阅读详情

当我们遇到类似于求a*b%c这样的问题的时候,如果是a^b%c,当a^b这个数特别大的时候,以至于int范围存不下该值,那最后取模得到的值当然也是错的,这个时候就运用到快速幂取模算法,这种算法的时间复杂度是O(logn),效率非常快,也是常用的几种算法之一。
快速幂取模依赖于以下数学公式:
这里写图片描述
以及a*b%c = ((a%c)*(b%c))%c
用二分的思想把b分为奇数和偶数,再运用公式按步求解,每次运算的时候进行取模,就可以使得数据不会溢出。具体代码如下:

#include <iostream>
using namespace std;
class fast_exponentiation
{
    public:
        fast_exponentiation(int a, int b, int c)
        {
            this->a = a;
            this->b = b;
            mod = c;
        }
        __int64 get_ans()
        {
            __int64 temp = a%mod, ans = 1;  //用temp来记录每次平方的值,ans用来记录最后的答案
            while(b!=0)
            {
                if(b%2 != 0)  //当b为奇数。如果b是偶数,最后也会进一次if。
                {
                    ans = (ans*temp)%mod;  //防止ans*temp溢出,进行取模
                }
                temp = (temp*temp)%mod; //平方时进行取模
                b/=2;
            }
            return ans;
        }
    private:
        int a, b, mod;
};
int main()
{
    __int64 answer;
    fast_exponentiation test(2,62,3);
    answer = test.get_ans();
    printf("%I64u\n", answer);
    return 0;
}
快速幂算法详解:从二进制原理到蓝桥杯实战应用 在计算机算法与数据结构中,处理大数幂运算是常见的性能挑战。其核心原理基于二进制分解与倍增思想,通过将指数转化为二进制形式,利用平方操作替代连续乘法,将时间复杂度从O(n)优化至O(log n)。这种优化在模运算场景下价值尤为突出,能有效防止中间结果溢出并大幅提升计算效率。从技术价值看,快速幂不仅是解决指数爆炸问题的关键工具,更是理解算法优化思想的经典范例。其应用场景广泛,包括密码学中的模幂运算、组合数学的逆元计算,以及通过矩阵快速幂解决线性递推问题。本文以蓝桥杯真题为切入点,深入剖析快速幂的实现细节与常见陷 阅读详情

相关推荐

保姆级教程:用Code Blocks搞定中科蓝讯AB5768E蓝牙音响SDK开发环境(附资源包)

本文提供了一份详细的Code Blocks配置指南,帮助开发者快速搭建中科蓝讯AB5768E蓝牙音响SDK开发环境。从工具链安装、环境配置到工程导入和调试技巧,涵盖全流程避坑要点,特别适合K12开发板初学者。附资源包下载,助您高效完成蓝牙音响开发。

weixin_28692817的博客 448

模(Mod)运算的运算法则

一、定义 对于任意实数x,y,可以有 模(Mod)在一些场合,可以使用符号%表示,它是一个二元运算。x mod y的值都介于0和模之间: 其中y=0,为了避免用零做除数,为了完整起见,我们定义 x mod 0 = x. 二、 运算法则 模(Mod)运算的规则、公式与基本四则运算有些类似,但是除法例外。其规则如下: 模运算满足结合律、交换律、分配率,具体如下: A. 结合律 ((a+b)%p+...

sally的jerry 6万+

从零开始:Ubuntu 24.04 LTS + Win11双系统安装教程

本文将简单直白介绍如何从零开始在同一台电脑上安装 Ubuntu 24.04 LTS 和 Windows 11,你可以在需要进行专业开发或运维工作时,轻松切换到 Ubuntu,享受其带来的高效与自由;而在日常学习生活和娱乐休闲时,依然可以无缝使用熟悉的 Windows 环境。

萑澈的博客 8115

模运算

基本的模运算公式: (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p) % p (a * b) % p = (a % p * b % p) % p a ^ b % p = ((a % p)^b) % p       a^b% m = (...((a % m) * a) % m) ......* a) % m其中a

gaoxiangnumber1——Gao Xiang's Blog 1091

VirtualBox创建虚拟机(为安装Ubuntu桌面系统)

Ubuntu的安装非常灵活。但是万变不离其宗,归纳起来,无非就是以下3种:(1)用户可以下载完整的ISO镜像文件,将其转移到各种介质上面,例如DVD或者U盘,然后以该介质引导系统进行安装。(2)用户可以下载一个非常小的网络安装器,利用该安装器引导系统进行在线安装。(3)用户可以将Ubuntu安装到一个U盘中,随身携带。为了便于读者学习,本节将介绍通过完整的ISO镜像文件安装Ubuntu。其他的安装方式将在后面介绍。

夏天又到了的专栏 2687

无人机上下通信信号解析程序和代码

总的来说,无人机上下行信号解析是无人机系统中非常重要的一部分,它关系到无人机的飞行控制和图像传输能力,对于保障无人机的飞行安全和数据传输质量具有重要作用。3. 读取和解析地面控制中心发送的命令和数据:程序还需要能够读取地面控制中心发送给无人机的命令和数据。1. 读取和解析无人机发送的命令和数据:程序需要能够读取无人机发送的信号,并解析其中的命令和数据。4. 将解析结果传递给无人机:解析地面控制中心发送的命令和数据后,程序需要将解析结果传递给无人机。具体的实现方式可以根据无人机的通信协议和硬件设备来确定。

2401_84824274的博客 2189

数据结构基础--散列表

散列表:包括冲突解决办法,散列函数

RXY24601的博客 5851

FDTD材料nk值拟合优化指南:利用材料资源管理器提升光学模型精度

本文详细介绍了如何利用FDTD仿真软件中的材料资源管理器,对材料nk值进行精确拟合与优化,从而提升光学模型的仿真精度。文章通过实战案例,解析了拟合参数调整、报告解读以及针对varFDTD求解器的特殊注意事项,帮助用户从根本上解决仿真结果不准的常见问题。

weixin_29196891的博客 352

快速幂取模(a^b%p问题)

目录:快速幂取模功能底层原理例题剖析题目描述输入格式输出格式输入输出样例提示思路方法:AC代码: 快速幂取模功能 解决指数型取模类问题,防止进行连续的幂运算时造成int或long long范围越界的情况。应用快速幂取模算法,可以极大的优化算法的时间和空间。 底层原理 两数之积取模等于对两数分别取模然后对积取模。 即: (a * b) % p = (a % p) * (b % p) % p 例题剖析 题目描述 给你三个整数 a,b,p,求 ab mod p。 输入格式 输入只有一行三个整数,分别代表 a,

Wty的刷题笔记 4643

特征工程自动化(FeatureTools实战)

本项目模拟生成的医疗、金融和电商等领域的原始数据,适用于自动化特征工程的场景。主数据表(Entity Table):例如用户数据、交易数据、患者数据等。字段可能包括用户ID、年龄、性别、注册日期、消费金额、行为记录等。关联数据表(Related Tables):例如订单数据、点击记录、诊疗记录等。多个表之间通过外键建立关联。patient_id:患者IDage:年龄gender:性别:入院日期:出院日期diagnosis:诊断结果。

闲人编程的博客 1359

vue3 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue3,nuxt3,高德地图,热力图,绘制热力图层,人流量,vue3使用高德地图实现某个区域热力图,vue3高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue3中使用高德地图渲染热力图组件,高德地图使用热力图详细教程,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅

✅ 精选推荐文章 5205

【算法】快速幂的介绍

顾名思义,快速幂就是能够快速地计算出以 a 为底数,b 为指数的幂,相较于传统的求幂算法,当指数 b 非常大时,使用快速幂算法,可以大大地降低循环的次数。

melonyzzZ的博客 1440

无人船 | 基于ROS的轻量级多无人艇自主导航仿真框架

无人水面艇USV是海上自主无人系统的关键组成部分,在民用、军用领域应用广泛,例如海上救援、水质测量、扫雷反潜等,因此对USV导航算法的研究具有重要意义。为了便于进行USV相关算法的验证与部署,本文介绍的这套基于ROS的多无人艇的自主导航仿真平台,轻量化地实现了建图、规划、控制等多种功能,同时自研框架保证了功能的高度可拓展和可定制

FRIGIDWINTER的博客 8002

ACM竞赛板子

文章目录数学欧拉筛(线性筛) 自己的板子积累,不断更新中 数学 欧拉筛(线性筛) 时间复杂度O(n) void prime(int n) { for(int i=2; i<=n; i++) { if(!st[i]) p[ans++]=i; for(int j=0; p[j]<=n/i; j++) { st[p[j]*i]=1; if(i%p[j]==0) break; } } } ......

qq_45769627的博客 3291

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蘑菇街算法实习生笔试复盘:数据结构与算法核心考点解析

数据结构与算法是互联网算法岗笔试的核心基石,从KMP字符串匹配到排序复杂度分析,从TopK问题到动态规划,这些经典考点直接检验候选人的工程思维与代码功底。掌握其原理不仅能高效应对笔试,更能为推荐、搜索等业务场景中的海量数据处理提供可靠方案。在电商场景下,算法实习岗还需兼顾机器学习基础与概率统计素养,理解逻辑回归、正则化等模型细节,才能从数据特征到业务指标形成完整闭环。本文以蘑菇街算法实习生笔试为样本,系统拆解各模块的考点脉络与备考策略,帮助求职者构建从基础算法到业务方案的完整知识体系,从容应对互联网公司的技

weixin_33957648的博客 349

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

2023 OPPO算法岗笔试深度复盘:考点拆解与编程题实战指南

在算法工程师的求职路上,字符串匹配、排序与动态规划等经典问题始终是笔试的核心基石。KMP算法通过next数组避免重复匹配,快速幂利用二进制分解将幂运算降至对数复杂度,贪心算法则聚焦于局部最优推导全局最优——这些基础原理不仅支撑着搜索引擎、推荐系统等业务场景,也是手机厂商算法岗筛人的重要标尺。聚类算法与机器学习基础理论同样高频出现,衡量着候选人对模型本质的理解深度。从数据结构到算法设计,从理论辨析到代码落地,每一类考点都在检验工程实践中的基本功。本文以2023年OPPO算法岗秋招笔试为样本,系统还原题型分布、

weixin_29172201的博客 352

快速了解快速幂和快速幂取模

快速幂和快速幂取模 **1. 快速幂 快速幂理解 求a^b的值 普通方法s=a*a循环b次–时间复杂度为O(n) 快速幂求解方法–时间复杂度降到O(log₂N) 1,当b为偶数时,a^b可以转为a^2d 的b/2次方 2,当b为奇数时,a^b 可以转为 a^2的b/2次方,再乘以a 快速幂核心代码 int power(int a,int b) { int r=1,s=a...

李kk的博客 307

数据结构与算法学习笔记----快速幂

快速幂算法的讲解和在乘法逆元上的引用

weixin_60278491的博客 1373

HDU 1420--Prepared for New Acmer【快速幂取模】

Prepared for New Acmer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7358    Accepted Submission(s): 2776 Problem Description 集训进行了将近

_阿阿阿阿欢 578

快速幂求模算法学习笔记

快速幂求模算法适用范围:求解(a.^b)%c。并且当a.^b超过int 或long int范围的时候也可以快速求出。 快速幂求模的引理: 乘积求模等于乘数分别求模相乘,结果再求模 代码: //a.^b % m int modul(long long a,long long b,long long m){ int result=1; a=a%m; while(b&...

LOVETEDA的博客 413

数据结构学习 快速幂

快速幂(递归快速幂,非递归快速幂,矩阵快速幂)

rainssssss的博客 508

数据结构与算法 - 幂运算优化:分治思想降低时间复杂度

摘要 本文介绍了幂运算的高效算法优化方法。首先分析朴素循环实现的时间复杂度为O(n),然后提出基于分治思想的快速幂算法,通过递归公式将复杂度降至O(log n)。文章详细展示了递归与迭代两种实现方式,并配以Mermaid图表和Java代码示例。当计算大指数时(如n=10^9),快速幂算法仅需约30次运算,相比朴素方法的10^9次运算显著提升了效率。这种算法优化思想适用于密码学、图形学等需要频繁幂运算的领域,是算法设计与数学洞察完美结合的典范。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

java算法题——快速幂-模

快速幂-模题目以及要求:代码: 题目以及要求: 代码: 1.递归算法 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class 快速幂模板题 { public static void main(String[] args) { Scanner sc=new ...

Belief的博客 227

POJ - 3070 Fibonacci 矩阵快速幂取模

Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9776   Accepted: 6964 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn 

爆米 608

快速幂

总结了一些相关知识,这里没有给出证明,以后有机会再补上。 1 #include<iostream> 2 #include<cstring> 3 4 using namespace std; 5 6 typedef long long ll; 7 const ll mod = 1000000009; 8 ...

bangliu4605的博客 103

数据结构与算法-学习笔记

这段时间笔者开始学习和研究数据结构与算法,也同时借此学习和熟悉python,这篇博客先探讨一下快速幂吧,在一些赛事,比如蓝桥的模拟赛中会见到。这是蓝桥1514快速幂模板题。先分析一下快速幂的思想:快速幂(也称为“二分幂”)是一种高效的算法,用于计算大整数的幂次。它利用了二进制表示和倍增思想,将时间复杂度从 O(p)降低到 O(logp),即对数的复杂度。

yuange1666的博客 533
上一篇: 程序员技术练级攻略
下一篇: 二叉树-求{0,1....n-1}的非空子集
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值