A^B mod C的分治思想

《星空解题家》:二分快速幂——何为二分快速幂?二分思想解题 二分快速幂 分而治之 阅读详情

A^B mod C

假设0<a,b,c<n

1.使用最原始的方法是把A^B先求出来,最后mod C求出值。

但是这种方法效率低,时间复杂度为O(b)而且a^b必须小于n才不会溢出。具有很大的局限性。

 

2.改进方法一:

假设A>C,那么存在A^B mod C = (A mod C)^(B mod C)

这种情况用在A>C的情况下非常适用,但是当A<C的时候,就无法使用。

所以最坏的情况下,还是需要a^b必须小于n才不会溢出。此法也不合适。

 

改进方法二:

我们可以把A^B中的B分解为(2a+2b+2c...)

例如12^36 = 12^(22+25)

      12^36 = 12^22*12^25

      12^36 mod 35 = (12^22 mod 35)*(12^25 mod 35) mod 35

 

我们可以知道

(12^21 mod 35)

(12^22 mod 35)

(12^23 mod 35)

(12^24 mod 35)

(12^25 mod 35)

之间存在着以下关系

(12^2n mod 35) = (12^2n-1 mod 35)*2 mod 35

所以以上那些式子都可以依次求得。

 

最后查表实现(12^22 mod 35)*(12^25 mod 35) mod 35

 

但是这种方法还存在一个弊端,就是A*A必须要<n,否则也会造成结果的溢出。

虽然这种方法比上面的2种方法范围都大,但是还是不能满足我们的要求。

 

 

改进方法三:

既然上面一步溢出的临界值是A*A<n。

那我们就想办法把A*A再分解,让最后A*A mod C的值小于n

 

这边需要提到一个公式A*B mod C = (A mod C)*(B mod C)

 

我们假设A*A中,第一个A为X,第二个A为Y,而且必有

Y = 2a+2b+2c...

所以X*Y = X*(2a+2b+2c...)

所以X*Y mod C = ((((X*2a mod C) + (X*2b mod C)) mod C) + (X*2c mod C)) mod C......

 

由于我们可以知道

(X^21 mod C)

(X^22 mod C)

(X^23 mod C)

(X^24 mod C)

(X^25 mod C)

也存在以下关系

(X^2n mod C) = (X^2n-1 mod C)*2 mod C

所以以上那些式子都可以依次求得。

 

最后X*X mod C的值也可以求得。

最后使用 改进方法二 就可以求得A^B mod C了。

 

此法由于把A再次进行了分解。所以范围又进一步的扩大了。

此法的范围可以达到当A*2<n的时候,都可以求得。

分治法基础题型 A 、 51Nod - 1019 B、51Nod - 1046 C 、CodeForces - 448C D 、 CodeForces - 448D E、计蒜客 - T1561 F 、UVA - 10341 G 、 UVA - 11129 I、UVA - 12627 J、UVA - 1411 阅读详情

相关推荐

Zabbix故障排查10051端口无法启动:zabbix-server.service: main process exited, code=exited, status=1/FAILURE

zabbix-server.service: main process exited, code=exited, status=1/FAILURE报错说与数据库失去连接。

" DevOps菜鸟(Xu JieHao)" 的博客 2255

快速幂,a^b mod c

快速幂核心 a^b mod c=(a^2)^(b/2) mod c  (b为偶数); a^b mod c=((a^2)^(b div 2)*a) mod c (b为奇数)   以一道题为例,讲解快速幂算法。   题目:计算a^b mod c   朴素算法:直接计算求值。 var a,b,c,i,ans:longint; begin   readln(a,b,c);  ans

802

HFSS微带线仿真从零到一:材料参数与求解设置优化指南

在射频电路设计中,微带线仿真涉及电磁场求解与传输线理论,其精度高度依赖材料参数和求解设置。相对介电常数、损耗角正切和导体电导率等参数直接影响特性阻抗与插入损耗,而求解频率、网格划分和参数扫描则决定仿真效率与收敛性。合理设置这些参数可显著提升S参数准确性,避免设计迭代。应用场景包括天线馈线、滤波器和微波互连。本文基于HFSS微带线仿真实践,系统讲解材料选择与参数优化全链路,帮助工程师快速复现可靠模型。

weixin_29192211的博客 80

A^B Mod C

给出3个正整数A B C,求A^B Mod C。 例如,3 5 8,3^5 Mod 8 = 3。 Input 3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9) Output 输出计算结果 Sample Input 3 5 8 Sample Output 3 这道题需要用到快速幂除法,以优化计算速度 #include<stdio.h> typedef long long ll; int JS(ll a,ll b,ll c) {

weixin_63063062的博客 397

TS808效果器制作教程

TS808效果器制作教程 可以在立创商城购买到大部分的电阻电容和IC,音频接口,踩钉,电位器和电源接口可以去某宝看看都买得到的。链接https//pan.baidu.com/s/1QId1eIE3fJ2u5NLBSISvGA。安装过程过于繁琐,把所有元器件按照图纸焊接完成就可以调试了,祝你们成功!这是TS808经典效果器制作过程的记录。IC是JRC4558。...

qq_18948149的博客 3427

训练AI:从数据收集到模型部署的完整指南

如果你刚开始接触AI,建议先学习一些基础的编程和机器学习知识,还可以使用现成的AI平台和工具来帮助你训练AI模型。在这篇文章中,我们将详细探讨从数据收集到模型部署的完整步骤,并提供一些有用的技巧和工具,以帮助你成功地训练自己的AI模型。在收集数据时,你需要从可靠的数据源(如数据仓库、数据集市、API接口)获取数据,确保数据的准确性和完整性。常用的划分比例是70%的数据集用于训练模型、15%的数据集用于验证模型,5%的数据集用于超参数调整,最后10%的数据集用于测试模型的性能。测试数据集用于测试模型的性能。

a_wsnd的博客 4166

快速幂算法&A^B Mod C

最近在学习的过程中,又接触到了一个算法,叫做快速幂算法,它可以很大程度的减少时间复杂度 A^B Mod C 题目: 给出3个正整数A B C,求A^B Mod C。例如,3 5 8,3^5 Mod 8 = 3。 Input 3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9) Output 输出计算结果 Sample Input 3 5 8 Sample Output 3 #include<iostream> #include<cstdio> #

m0_63492368的博客 960

硬件工程师的破局之路:为何你才是考取软考高级架构师的“天选之子”?

硬件工程师如何转型系统架构师:独特优势与实战路径 文章揭示了硬件工程师在考取系统架构设计师证书时的独特优势。作者指出,硬件工程师的全局思维、接口设计能力和可靠性经验正是系统架构的核心要素。通过将硬件经验升维为架构思维(从引脚到接口、从单板到系统、从实现到权衡),硬件背景反而成为竞争优势。文章建议通过知识补全、建立架构决策日志和术语转换练习来备考,并强调硬件工程师在软硬协同时代的独特价值——既能统领硬件设计,又能为软件搭建最佳舞台。文末鼓励硬件工程师以更高视野看待职业发展,将系统架构师认证视为水到渠成的职业升

云轩阁 534

快速幂取余

求a^b mod c  算法1. 首先直接地来设计这个算法: int ans=1, i; for(i=1;i<=b;i++) ans*=a; ans%=c; 这个算法的时间复杂度体现在for循环中,为O(b). 这个算法存在着明显的问题,如果a和b过大,很容易就会溢出。 那么,我们先来看看第一个改进方案:在讲这个方案之前,要先有这样一个公式: a^b mod c=(

happy_lcj 3170

Vue3 - 详解播放m3u8视频流+HLS拉流推流完整方案,vue3如何播放m3u8格式文件实时视频播放教程(流媒体播放、直播视频流、实时摄像头监控视频流对接、后端服务器切片分片传输视频流边下边播)

vue3组件播放m3u8格式视频,实现hls流媒体监控摄像头实时播放,vue3播放m3u8视频流格式,实时直播画面视频流播放,摄像头监控画面推流,hls.js,Vue Video.js播放m3u8视频流格式,实现hls流媒体监控摄像头实时播放,vue中使用video.js播放m3u8格式的视频,m3u8格式视频,通过HLS协议播放m3u8格式视频,黑屏不显示怎么办,视频非常卡加载缓慢,拉流报错,推流报错,播放失败,播放监控m3u8视频流格式,苹果ios播放,vue3中使用video标签播放MP4,西瓜视频插

🏆 前端领域优质创作者 5940

计算分子相似度(摩根分子指纹计算)

import numpy as np import pandas as pd import seaborn as sns import matplotlib as plt from rdkit.Chem import Draw from rdkit.Chem import AllChem as Chem from rdkit.Chem import PandasTools from rdkit import DataStructs data = pd.read_csv(r'47_covidLead.csv'

weixin_39417324的博客 1387

模取幂运算 (a^b mod c)

其思想是利用数学公式: (a * b ) mod c = (( a mod c) * b) mod c;首先把 b 转化成二进制如: b0 b1 b2 b3..... b31 即 b = b0*231 + b1*230+......+ b31;也就是把 ab = a ^ (b0*231 + b1*230+......+ b31) = [a(b0*2^31)] * [a(b1*2^30)]

SMCwwh 2218

2026年广东省职业院校技能大赛中职组“大数据应用与服务”样题一完整参考答案

2026年广东省职业院校技能大赛中职组“大数据应用与服务”样题一完整参考答案

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 750

woj 1315 高级机密

Problem 1315 - 高级机密 Time Limit: 1000MSMemory Limit: 65536KBDifficulty: 5 Total Submit: 830 Accepted: 161 Special Judge: No Description 在很多情况下,我们需要对信息进行加密 。特别是随着Internet的飞速发展,加密计算数就显得尤为重要。 很早

IronYoung_不惧未来 2877

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

51Nod1046 A^B Mod C(C语言)

给出3个正整数A B C,求A^B Mod C。 例如,3 5 8,3^5 Mod 8 = 3。 Input 3个正整数A B C,中间用空格分隔。(1  Output 输出计算结果 Input示例 3 5 8 Output示例 3 C语言AC代码 #include int PowerMod(long long a,

sinat_39591298的博客 2038

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

51Nod-1046 A^B Mod C(快速幂取模)

1046 A^B Mod C 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出3个正整数A B C,求A^B Mod C。 例如,3 5 8,3^5 Mod 8 = 3。 Input 3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9) Output 输出计算结果 Input示例 3 5 8 Output示

hg_zhh 588

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

(分治法 快速幂)51nod1046 A^B Mod C

1046 A^B Mod C 给出3个正整数A B C,求A^B Mod C。 例如,3 5 8,3^5 Mod 8 = 3。 收起 输入 3个正整数A B C,中间用空格分隔。(1 <= A,B,C <= 10^9) 输出 输出计算结果 输入样例 3 5 8 输出样例 ...

156

51Nod 1046 A^B Mod C(快速幂)

  学习:http://blog.youkuaiyun.com/xuruoxin/article/details/8578992 int PowerMod(long long a,long long b,long long c) { long long ans=1; a=a%c; while(b) { if(b&1) //奇数情况 ans=(ans*a)

爱拼才会赢 1015

51nod 1046 A^B Mod C

分治,复杂度 logn // // main.cpp // wzazzy // // Created by apple on 2018/10/23. // Copyright © 2018年 apple. All rights reserved. // #include&lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;algor...

c3po 310

分治算法C++习题练习

​ 因为本文章是习题练习,所有不会有具体讲解。如想看具体的思路讲解,请在我的博客中找到​​​​​​​分治算法详解(带图),或者访问 ​​​​​​​分治算法详解(带图)_不怕困难的博客的博客-优快云博客 ​.........

m0_54615144的博客 609

『sumdiv 数学推导 分治』

sumdiv(POJ 1845) Description 给定两个自然数A和B,S为A^B的所有正整数约数和,编程输出S mod 9901的结果。 Input Format 只有一行,两个用空格隔开的自然数A和B(0<=A,B<= 50000000)。 Output Format 只有一行,即S mod 9901的结果。 Sample Input 2 3 Sample O...

weixin_33816821的博客 228

蓝桥杯分治

给你三个整数 𝑎,𝑏,𝑝a,b,p,求 𝑎𝑏 mod 𝑝abmodp。

qq_74794797的博客 2136

快速幂取模(分治思想)

快速幂取模 许多时候我们需要计算a^b %c 如是的式子。 一、像下面这样直接来求 int res = 1; for(int i = 1;i<=b;i++) { res = res * a; } res = res % c; 如果b很大,很容易超时;如果a,b很大,在计算过程中可能会超过long long所能表示的范围,因此想办法优化。 二、对于取模运算有

Feynman1999的博客 1526

a^b

【problem description】 求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9 【input format】 三个用空格隔开的整数a,b和p。 【output format】 一个整数,表示a^b mod p的值。 【sample input】 2 3 9 【sample output】 8 【analysis】 这题本来是个很简单的分治...

ctyer's blog 514

【C语言算法小工具系列】快速幂函数

在一些C语言的算法比赛或者C语言算法考试当中,往往不能直接使用现成的算法库,需要自己去写一些操作,这些操作统一记录在C语言算法小工具系列当中。不断除以2,然后递归计算,最后将结果相乘。它使用了分治的思想,将指数。

m0_61139217的博客 415

杭电oj人见人爱A^B

杭电oj人见人爱A^B 最先想到的就是pow()函数,但是在测试过程中发现pow()函数对输入的数据有诸多限制,可能导致错误的情况: 1.如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。 2.如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。 3.如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。 4.如果返回值 ret

ldjzxn的博客 306
上一篇: 【收藏】A^B mod C代码
下一篇: 费马小定理
cclsoft
博客等级 码龄19年 39粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值