问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编程 取余运算

发布网友 发布时间:2022-05-20 13:00

我来回答

1个回答

热心网友 时间:2023-10-22 07:21

如果p比较小,算法如下:
for i:=1 to p do
b:=(b mod k)*b mod k;
现在p比较大,所以将p用二进制表示以寻求优化,设p=2^k0+2^k1....
则算法可化为:
for i:=1 to 2^k0 do ....
for i:=1 to 2^k1 do .....
....
现在要计算的是p^(2^k0+2^k1....) mod k
即p^2^(k0+k1+....) mod k
所以算法可化为:
(将p传化成2进制数放在binary数组中)
rest:=b;
for i:=1 to len do
if binary[i]=1 then
for j:=1 to i do rest:=(rest mod k)*(rest mod k) mod k;
该算法的时间复杂度为O((log2(n))^2),已经可以解决题目的问题
不过要继续优化也是可以的

我们观察上面的算法,可以发现
若k0>k1,那么在计算p^2^k0中已经计算了p^2^k1
所以j的循环是可以放入i循环中的
再经过优化后,算法就变成了下面的样子,就是你上面的程序:
rest:=1;
for i:=len downto 1 do begin
temp:=rest*rest mod k;
if binary[i]=1 then
rest:=(b mod k*temp) mod k
else rest:=temp;
end;
算法可以这样理解:
比如现在要计算p^2^(m+n0)
设当前计算到了二进制数p的第m位,即i=len-m+1,且binary[m]=1,之前已经计算了b^2^n1
(就相当于要计算b^2^m)
现在将b^2^n1乘上b,就变成b^2^n1*b
这样在接下来的循环中,还要再循环m次,循环结束后就变成了(b^2^n1*b)^2^m
即p^2^(m+n0)
这样就满足了原来的要求
说得不是很清楚,请见谅
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
橙子冷藏能保存多久 橙子会过期吗 新鲜橙子如何保存更久 橙子保鲜剂对人体有害吗 粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 博罗县石湾镇电信补卡在哪里 请问博罗电信的员工福利如何? log for是什么意思 惠州市博罗县龙溪镇中国电信宽带经常故障 在博罗县石湾镇拉电信4M宽带要多少钱一年 博罗县石坝镇电信营业厅 我用电话线报装电视,要办什么手续 谁知道。惠州博罗接电信宽带的号码是多少?,急 惠州博罗的电信3G网络信号好吗?我是近东莞这边的。 广东惠州博罗 装电信宽带还是联通宽带好? 印刷组长半年工作总结 做关于一个真实的故事的PPt用哪些模板呢 印刷机机长工作总结 PPT模板的事情,求各位大神 天天爱西游锦毛鼠卡包几次能抽到 我是一名印刷厂印刷员工 该怎么写工作总结 游戏王轰魔神卡组和光道哪个实用性高? TCG应该买哪些卡包? 卡组潜力大吗? 炉石传说上古之神的低语和经典卡包哪个好 炉石传说新手开什么卡包 一直想知道游戏王开哪些卡包比较实用。。。 关于灯亮的四字词语 惠州博罗石湾电信客服电话多少 博罗除了电信宽带那个比较好?长城宽带?铁通宽带?联通宽带? 如何批处理txt或log文件 博罗县公庄镇中国电信号码是多少 梨子的核可以种植成什么 投诉惠州市博罗县龙华镇电信营业厅百分之一百的恶劣! js中console.log在function中的for里,设置函数运行次数后只执行最后一个结果是什么情况代码如下 请问广东惠州电信博罗片区光猫用的是哪个品牌比较多 基因表达矩阵 log转换用什么代码 红茄梨的种植 联通,铁通,电信,长城宽带。。。个有什么优点缺点?我比较少玩游戏的。我在广东惠州博罗~最近有什么优 大O表示法的例子 我国西洋梨生产情况如何? 前端for循环问题? 有没有中国电信项目营业厅? 批处理获取当前计算机名、工作站域、IP输出文件,并根据文件修改系统信息 两道JAVA题目,求大神解答 javascript中的for语句,实现1-50之间所有质数的总个数并把他们输出到页面 收银机 的扫描枪 支持rfid么 RFID阅读器(扫描器),扫描的是一个面,还是一条线