快速幂模

快速幂模

  • 简述
  • 师从
  • 普通思路
    • 缺陷一:溢出
    • 缺陷二:运算次数多
  • 二分化快速幂模

简述

计算 ana^nanmod p

师从

本篇是观Vita君算法视频后总结,他是bilibili一位小up主:小学生Vita君
正所谓“生乎吾后,其闻道也亦先乎吾,吾从而师之”,诚然如此。
【算法小知识】如何计算快速幂(上)

普通思路

(aaaaaa……aaa) % p

缺陷一:溢出

ana^nan可能会溢出

解决方案:边乘边模
基于 (a*b) mod p = (a mod p)(b mod p) 成立
(aaaa……)=(a%p)(a%p)(a%p)(a%p)……

缺陷二:运算次数多

当n较大时,运算次数很大,速度慢

解决方案:二分化思想
ana^nan=an2a^\frac{n}{2}a2nan2a^\frac{n}{2}a2n
an2a^\frac{n}{2}a2n=an4a^\frac{n}{4}a4n
an4a^\frac{n}{4}a4n
……
(当指数为奇数时,需额外乘a)
将时间复杂度O(n) O(logn)

二分化快速幂模

#include<iostream>
using namespace std;typedef unsigned long long ull;
ull binpow(ull a, ull n, ull p)
{if (n == 0) return 1;a %= p;ull c = binpow(a, n / 2, p);if (n % 2 != 0) return c * c % p *( a % p );return c * c % p;
}
int main()
{ull a, n, p;cin >> a >> n >> p;cout<< binpow(a, n, p) % p<<endl;
}

非递归:

ull binpow(ull a, ull n, ull p)
{ull prod = 1;while(n > 0){if (n & 1) prod = prod * a % p;a *= a % p;n >>= 1;}return prod;
}

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

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

相关文章

《那些年啊,那些事——一个程序员的奋斗史》——31

“我们再重新找房吧&#xff1f;”伍定轩对段伏枥说道。“为什么&#xff1f;”段伏枥突然觉得奇怪&#xff0c;为何伍定轩会突然提出这个问题。“你看我的仙人掌。”伍定轩指了指摆在电脑旁边的一盆仙人掌。当初伍定轩决定买这小盆仙人掌的时候&#xff0c;也是从网上听人说&a…

数煤球

煤球数目 有一堆煤球&#xff0c;堆成三角棱锥形。具体&#xff1a; 第一层放1个&#xff0c; 第二层3个&#xff08;排列成三角形&#xff09;&#xff0c; 第三层6个&#xff08;排列成三角形&#xff09;&#xff0c; 第四层10个&#xff08;排列成三角形&#xff09;&…

cobalt strick 4.0系列教程(3)---数据管理

0x01 概述 Cobalt Strike 的团队服务器是行动期间 Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来自它的 Beacon payload 的输出&#xff0c;提取出目标、服务和凭据。 如果你想导出 Cobalt Strike 的数据&#xff0c;通过 Reporting → Export Data 。Cobalt S…

JavaScript中的交互式网页/事件处理

Programming languages like C, C etc are all based on synchronous coding approach i.e. the execution takes place from top to bottom in a linear manner. 诸如C&#xff0c;C 等编程语言均基于同步编码方法&#xff0c;即执行以线性方式从上到下进行。 But JavaScript…

2008来了,搬个凳子先

此帖为证. 转载于:https://www.cnblogs.com/margiex/archive/2008/01/01/1022098.html

题目收藏夹(自用)

题目收藏夹&#xff08;自用&#xff09; 计数质数 【埃氏筛】【线性筛】

calayer 与uiview

研究Core Animation已经有段时间了&#xff0c;关于Core Animation&#xff0c;网上没什么好的介绍。苹果网站上有篇专门的总结性介绍&#xff0c;但是似乎原理性的东西不多&#xff0c;看得人云山雾罩&#xff0c;感觉&#xff0c;写那篇东西的人&#xff0c;其实是假 设读的人…

代换-置换网络(SP网络)

0x01 概述 代换-置换网络是一系列被应用于分组密码中相关的数学运算&#xff0c;高级加密标准&#xff08;英语&#xff1a;AES&#xff09;、3-Way、Kuznyechik、PRESENT、SAFER、SHARK、Square都有涉用。这种加密网络使用明文块和密钥块作为输入&#xff0c;并通过交错的若干…

Java SecurityManager getSecurityContext()方法与示例

SecurityManager类的getSecurityContext()方法 (SecurityManager Class getSecurityContext() method) getSecurityContext() method is available in java.lang package. getSecurityContext()方法在java.lang包中可用。 getSecurityContext() method is used to return an ob…

生日蜡烛

某君从某年开始每年都举办一次生日party&#xff0c;并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来&#xff0c;他一共吹熄了236根蜡烛。 请问&#xff0c;他从多少岁开始过生日party的&#xff1f; 请填写他开始过生日party的年龄数。 注意&#xff1a;你提交的应该是一…

修改vs2005的键盘风格设置

由于以前都是用VC6.0&#xff0c;安装的VS.NET默认的键盘快捷键布局都是C#的。 修改方法&#xff1a; 选项 -> 环境 -> 键盘 。进去后选第一项&#xff1a;键盘映射方案 即可&#xff0c;还可以在这里自定义其他快捷键 转载于:https://www.cnblogs.com/jacktu/archive/…

【贪心】最小生成树Kruskal算法Python实现

文章目录 [toc]问题描述最小生成树的性质证明 Kruskal算法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;贪心算法 问题描述 设 G ( V , E ) G (V , E) G(V,E)是无向连通带权图&#xff0c; E E E中每条边 ( v , w ) (v , w) (v,w)的权为 c [ v ] …

asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010...

using Microsoft.Office.Interop.Excel;//转换为excel时&#xff0c;需要引用此命名空间 using ET;//转换为wps时&#xff0c;需要引用此命名空间using KSO;//转换为wps时&#xff0c;需要引用此命名空间当转换为excel时&#xff0c;需要引入Microsoft.Office.Interop.Excel.dl…

Java GregorianCalendar getActualMaximum()方法与示例

GregorianCalendar类getActualMaximum()方法 (GregorianCalendar Class getActualMaximum() method) getActualMaximum() method is available in java.util package. getActualMaximum()方法在java.util包中可用。 getActualMaximum() method is used to get the actual maxim…

一点一滴学习Linux--Mysql篇

1.查看是否安装了Mysql [rootlocalhost zhoulinghong]# rpm -qa |grep MySQL MySQL-server-community-5.1.22-0.rhel4 已经安装了。 2.安装mysql&#xff08;rpm&#xff09; [rootlocalhost zhoulinghong]# rpm -ivh MySQL-server-community-5.1.22-0.rhel4.i386.rpm …

HTML5 学习笔记

HTML5 学习笔记 前言 该学习笔记的相关学习视频&#xff1a;【狂神说Java】HTML5完整教学通俗易懂 目前笔记只有简单的例子和框架&#xff0c;将来在实践中会进一步学习和补充内容 目录HTML5 学习笔记前言网页基本信息网页基本标签标题标签段落标签换行标签水平线标签字体样式…

面向对象(方法的形式参数)

1&#xff0c;局部变量与成员变量的区别 1&#xff0c;在类中的位置不同 成员变量&#xff1a;在类中方法外 局部变量&#xff1a;在方法定义中或者方法声明上2&#xff0c;在内存中的位置不同 成员变量&#xff1a;在堆内存&#xff08;成员变量属于对象&#xff0c;对象进…

保护机制

0x01 概述 操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险&#xff0c;包括DEP、ASLR等。在编写漏洞利用代码的时候&#xff0c;需要特别注意目标进程是否开启了DEP&#xff08;Linux下对应NX&#xff09;、ASLR&#xff08;Linux下对应PIE&#xf…

机器学习降维算法一:PCA(主成分分析算法)

引言&#xff1a; 机器学习领域中所谓的降维就是指采用某种映射方法&#xff0c;将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y&#xff0c;其中x是原始数据点的表达&#xff0c;目前最多使用向量表达形式。 y是数据点映射后的低维向…

VS 2005模板丢失找回的办法

安装其他插件的时候&#xff0c;常常模板丢失&#xff0c;比较郁闷&#xff0c;以前就用土办法&#xff0c;重装VS来解决这个问题&#xff0c;这次终于弄清楚怎么回事了&#xff0c;可以采取下面两个步骤解决1。复制ProjectTemplates和ItemTemplates&#xff0c;保证VS能找到相…