模幂运算

2023-05-16

概念:
  模运算即求余运算。“模”是“Mod”的音译,模运算多应用于程序编写中。 Mod的含义为求余。模运算在数论和程序设计中都有着广泛的应用,从奇偶数的判别到素数的判别,从模幂运算到最大公约数的求法,从孙子问题到凯撒密码问题,无不充斥着模运算的身影。虽然很多数论教材上对模运算都有一定的介绍,但多数都是以纯理论为主,对于模运算在程序设计中的应用涉及不多。
  模幂运算则是指先进行幂运算,在进行模运算。

算法:
1)描述:
  根据运算规则ab % p = ((a % p)b) % p ,我们知道3333^5555(%10)= 3^5555(%10)。由于3^4 = 81,所以3^4(%10)= 1。
  根据运算规则(3) (a * b) % p = (a % p * b % p) % p ,由于5555 = 4 * 1388 + 3,我们得到3^5555(%10)=(3^(4*1388) * 3^3)(%10)=((3^(4*1388)(%10)* 3^3(%10))(%10)=(1 * 7)(%10)= 7。
  计算完毕。
  利用这些规则我们可以有效地计算X^N(% P)。简单的算法是将result初始化为1,然后重复将result乘以X,每次乘法之后应用%运算符(这样使得result的值变小,以免溢出),执行N次相乘后,result就是我们要找的答案。
  这样对于较小的N值来说,实现是合理的,但是当N的值很大时,需要计算很长时间,是不切实际的。下面的结论可以得到一种更好的算法。
  如果N是偶数,那么X^N =(X*X)^[N/2];
  如果N是奇数,那么X^N = X*X^(N-1) = X *(X*X)^[N/2];
  其中[N]是指小于或等于N的最大整数。 
2)源码:

View Code

 1 // 函数功能:利用模运算规则,采用递归方式,计算X^N(% P)
2 // 函数名:PowerMod
3 // 输入值:unsigned int x,底数x
4 // unsigned int n,指数n
5 // unsigned int p,模p
6 // 返回值:unsigned int,X^N(% P)的结果
7 unsigned int PowerMod(unsigned int x, unsigned int n, unsigned int p)
8 {
9 if (n ==0)
10 {
11 return1;
12 }
13 unsigned int temp = PowerMod((x * x)%p, n/2, p); //递归计算(X*X)^[N/2]
14 if ((n &1) !=0) //判断n的奇偶性
15 {
16 temp = (temp * x) % p;
17 }
18 return temp;
19 }

【参考资料 感谢作者】
模运算_百度百科:http://baike.baidu.com/view/2385246.htm#2 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模幂运算 的相关文章

  • 面试题:你在项目中遇到哪些问题?

    你在项目中遇到哪些问题 xff1f 因为目前项目采用的是分布式 xff0c 分布式环境下一般采用集群方案 xff0c 所以这就会带来分布式的一些问题 xff0c 比如 xff1a 1 分布式锁 2 分布式session 3 分布式全局id
  • 检查 ubuntu 版本_如何检查Ubuntu版本–快速简便的方法

    检查 ubuntu 版本 In this tutorial we will go over the easiest methods to check Ubuntu version from the terminal You can use
  • hashheap python 实现

    class Node object 34 34 34 the type of class stored in the hashmap in case there are many same heights in the heap maint
  • Cocos Creator 实现大厅+子游戏模式

    大厅 43 子游戏的模式 xff0c 在棋牌类型 教育类型游戏中比较常见 xff0c 通常是安装包里面只有大厅的资源和代码 xff0c 然后子游戏根据需求以热更新的方式下载来提供给玩家 之前一直负责的是cocos2dx lua的开发 xff
  • matlab练习程序(Kruskal最小生成树)

    老物了 xff0c 网上的例子多的数不过来 不过我还是有必要练习一下的 之所以看这个算法是因为最近在看颜色聚合向量时 xff0c 有的论文用到了最小生成树 xff0c 因此我就拿来熟悉一下 Kruskal算法类似于连通分支算法 xff0c
  • Ubuntu18.04创建新的系统用户

    目标 xff1a 1 为测试学习Docker xff0c 在虚拟机OS为18 04里 xff0c 创建一个系统账号 xff0c 账号名称 xff1a docker 2 在 home下有新建username的文件夹 一 建立账号 1 以roo
  • gooreplacer 很好用

    国内上 StackOverflow hackernews 之类的站点会慢 因为页面里有链接指向 google 谷歌 会被墙 于是拖累了整个页面的显示 gooreplacer 可以把这些被墙连接替换掉 安装方法的话 xff0c 在浏览器的安装
  • vscod 技巧,自动循环书写li

    ul gt li 10 这是第 个li lt ul gt lt li gt 这是第1个li lt li gt lt li gt 这是第2个li lt li gt lt li gt 这是第3个li lt li gt lt li gt 这是第4
  • Ai challenger 2017 image caption小结

    参加了今年的 ai challenger 的 image caption比赛 xff0c 最终很幸运的获得了第二名 这里小结一下 Pytorch 越来越火了 前五名有三个 pytorch xff0c 两个 tensorflow 关于哪个 l
  • 哥很无奈 今天看到我的host文件是这个样子

    127 0 0 1 www gtxp2 com 这家无良公司在所谓的网维工具内加入了屏蔽我站的信息 xff0c 我们也是不得已做出反击 xff0c 望见者谅解 127 0 0 1 gtxp2 com 封死此无良网站 xff0c B4此站的相
  • [转载] 以下划线开头的变量

    转自 xff1a https blog csdn net Grevi article details 60581354 今天在公司看 GNU ISO C 43 43 Library库中的stl库时 xff0c 偶然间感觉到一个问题 xff0
  • 如果编程语言是武侠

    如果是武功 C紫霞神功要大成需要很长时间 xff0c 威力还行Cpp九阳神功威力巨大Lisp小无相功你可以把它当做任何武功Shell太极拳四两拨千斤PHP打狗棒法不上台面 xff0c 但威力惊人Java八荒六合唯我独尊神功 无敌C 北冥神功
  • 跳转位置-更改目录(CD)PowerShell命令,可让您读懂

    There 39 s a lovely little utility called autojump for nix consoles that makes the 39 cd 39 command very smart More that
  • C#结构体指针的定义及使用详解

    在解析C 结构体指针前 xff0c 必须知道C 结构体是如何定义的 在c 中同样定义该结构体 C 结构体指针之C 结构体的定义 xff1a StructLayout LayoutKind Sequential public struct V
  • Permutation Test 置换检验

    显著性检验通常可以告诉我们一个观测值是否是有效的 xff0c 例如检测两组样本均值差异的假设检验可以告诉我们这两组样本的均值是否相等 xff08 或者那个均值更大 xff09 我们在实验中经常会因为各种问题 xff08 时间 经费 人力 物
  • LaTeX 中使用三级标题

    需要在导言区加入命令 xff1a setcounter secnumdepth 4 而后 xff1a section 一级标题 subsection 二级标题 subsubsection 三级标题
  • 为啥程序员下班后只关显示器从不关电脑?

    阅读本文大概需要 3 分钟 你下班时是不是只将显示器一关 xff0c 揣上手机就走了 xff1f 曾有安保人员晚上来办公室巡查时问 xff0c 为什么这些人不关机就下班呢 xff1f 作为程序员 xff0c 你会心一笑 对方不明白如果关机了
  • 美国 ZIP Code 一览表

    Zip Code 这个是美国的邮政编码 美国目前只有邮政是国营的 其余的产业都不是国营的 今天给大家提供美国的Zip Code的原因是大家在注册国外的账号时 需要提供这个Zip Code 因为一般美国的服务默认是面向美国的 甚至是仅支持美国
  • pytorch .detach() .detach_() 和 .data用于切断反向传播

    参考 xff1a https pytorch cn readthedocs io zh latest package references torch autograd detachsource 当我们再训练网络的时候可能希望保持一部分的网

随机推荐