算法——数论——快速幂

目录

快速幂

费马小定理

一、试题 算法训练 A的B的C次方次方


快速幂

  • 快速幂是一种用于快速计算幂运算的算法。
  • 计算复杂度 O(log n)
  • 基本思想是利用指数 n 的二进制展开形式,将 a^{n} 转化为多个 a 的幂的乘积,然后通过迭代快速计算。

快速幂的示例代码:

public class FastExponentiation {// 使用快速幂来计算 x 的 n 次方public static long fastExponentiation(int x, int n) {if (n == 0) {return 1; // 如果 n 等于 0,任何数的 0 次方都是 1}if (n % 2 == 0) {long temp = fastExponentiation(x, n / 2); // 如果 n 是偶数,将问题分解为计算 x^(n/2)return temp * temp; // 结果即为 x^(n/2) 的平方} else {long temp = fastExponentiation(x, (n - 1) / 2); // 如果 n 是奇数,则先计算 x^((n-1)/2)return temp * temp * x; // 结果即为 x^((n-1)/2) 的平方再乘以 x}}public static void main(String[] args) {int base = 2; // 底数int exponent = 10; // 指数long result = fastExponentiation(base, exponent); // 计算 2 的 10 次方System.out.println(base + " 的 " + exponent + " 次方结果为:" + result);}
}

费马小定理

  • 费马小定理是数论中的一个重要定理,它提供了一种在模数下求指数幂的快速计算方法。

  • 费马小定理的表述如下:

    模数 p 是一个质数,并且底数 a 不是 p 的倍数,则有: a^(p-1) ≡ 1 (mod p)

    其中,a^(p-1) 表示 a 的 p-1 次方。

  • 简而言之,费马小定理公式:a ^ b mod p = a ^ (b mod (p-1)) mod p

一、试题 算法训练 A的B的C次方次方

分析:

  • 套用快速幂的代码
  • 注意两点:
    • 1、取余时,在每一步计算中都需要对结果取模以防止整数溢出
    • 2、使用费马小定理来简化指数幂的计算,减少计算量
      • 费马小定理的应用前提是模数 p 是一个质数,并且底数 a 不是 p 的倍数
      • 模数 p 是一个质数,并且底数 a 不是 p 的倍数,则有费马小定理公式:a ^ b mod p = a ^ (b mod (p-1)) mod p

    • 如果不用费马小定理,只能拿80分

import java.util.Scanner;public class Main {private static final int mod = 1000000007;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long a = scanner.nextLong();long b = scanner.nextLong();long c = scanner.nextLong();long tmp = fastExponentiation(a, fastExponentiation(b, c, mod-1), mod);System.out.println(tmp);}public static long fastExponentiation(long x,long n,int mod) {//快速幂if(n==0) {return 1;}if(n%2==0) {//偶数次方long temp=fastExponentiation(x,n/2,mod);return temp*temp%mod;}else {//奇数次方long temp=fastExponentiation(x,(n-1)/2,mod);temp=temp*temp%mod;//在每一步计算中都需要对结果取模以防止整数溢出return temp*x%mod;}}
}

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

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

相关文章

计算机组成原理:存储系统【二】

🌈个人主页:godspeed_lucip 🔥 系列专栏:计算机组成与原理基础 🛰️1 Cache概述🛩️1.1 局部性原理🛫1.1.1 空间局部性🛫1.1.2 时间局部性 🛩️1.2 性能指标&#x1f6eb…

06MARL经典算法 基于agent modelling

文章目录 前言agent modelling一、Fictitious Play(虚拟博弈)二、JAL with agent modelling 前言 基于JAL的算法需要对智能体的行为做出假设以便应用博弈知识求解策略,带来很多限制,根据其他智能体观察到的行为对其它智能体进行建模,预测其行…

MySQL 基础知识(四)之表操作

目录 1 约束 2 查看已有表 3 创建表 4 查看表结构 5 修改表 6 删除表 1 约束 主键约束 primary key:唯一,标识表中的一行数据,此列的值不可重复,且不能为 NULL,此外,可以多个列组成主键唯一约束 uniq…

Matplotlib自定义辅助函数 (一):让你的图表大放异彩!

Matplotlib美化秘诀:自定义辅助函数,让你的图表大放异彩! 利用Matplotlib进行数据可视化示例 🌵文章目录🌵 🌳一、创建自定义样式函数🌳🌳二、创建自定义颜色映射🌳&…

Rabbit和Springboot整合(高阶)

在昨天的练习作业中,我们改造了余额支付功能,在支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付。 但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单…

【C语言】常见字符串函数的功能与模拟实现

目录 1.strlen() 模拟实现strlen() 2.strcpy() 模拟实现strcpy() 3.strcat() 模拟实现strcat() 4.strcmp() 模拟实现strcmp() 5.strncpy() 模拟实现strncpy() 6.strncat() 模拟实现strncat() 7.strncmp() 模拟实现strncmp() 8.strstr() 模拟实现strstr() 9.str…

每日五道java面试题之java基础篇(六)

第一题:Java 创建对象有哪⼏种⽅式? Java 中有以下四种创建对象的⽅式: new 创建新对象通过反射机制采⽤ clone 机制通过序列化机制 前两者都需要显式地调⽤构造⽅法。对于 clone 机制,需要注意浅拷⻉和深拷⻉的区别,对于序列化机制需要明…

每日OJ题_递归①_力扣面试题 08.06. 汉诺塔问题

目录 递归算法原理 力扣面试题 08.06. 汉诺塔问题 解析代码 递归算法原理 递归算法个人经验:给定一个任务,相信递归函数一定能解决这个任务,根据任务所需的东西,给出函数参数,然后实现函数内容,最后找出…

【Vue】工程化开发脚手架Vue CLI

📝个人主页:五敷有你 🔥系列专栏:Vue⛺️稳重求进,晒太阳 工程化开发&脚手架Vue CLI 基本介绍 Vue Cli是Vue官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子【集成了we…

解决‘vue‘ 不是内部或外部命令,也不是可运行的程序(设置全局变量)

发现是没有执行: npm install -g vue/cli 但是发现还是不行 此时,我们安装了 Vue CLI,但是在运行 vue ui 命令时出现了问题。这通常是因为全局安装的 Vue CLI 的路径没有被正确地添加到系统的环境变量中。 可以尝试以下几种方法来解决这个问…

Cocos2dx-lua ScrollView[一]基础篇

一.ScrollView概述 cocos游戏中ScrollView控件大量使用,95%以上的项目都会使用ScrollView,个别游戏可能全部使用翻页的滑动效果。如果想要精通Cocos的UI开发,精通ScrollView控件非常关键,因此对ScrollView的使用进行总结很有必要。 下文缩写说明:sv = ScrollView, item代…

分布式文件系统 SpringBoot+FastDFS+Vue.js【三】

分布式文件系统 SpringBootFastDFSVue.js【三】 七、创建后台--分角色管理7.1.创建后台数据库表7.2.创建实体类7.2.1.Admin7.2.2.Menu7.2.3.MenuBean7.2.4.Role7.2.5.RoleMenu 7.3.编辑配置文件application.yml7.4.编写工具类7.4.1.AuthContextHolder7.4.2.HttpUtils7.4.3.Stri…