前言

知道快速幂首先要知道(a * b)%c=(a%c)*(b%c)
还要知道 ab= a2*(b/2) = (a2(b/2)
当换成int类型需要考虑奇偶型做不同处理
那么幂分为奇偶数考虑

  1. b%2=0: ab= a2*(b/2)=(a2)b/2
  2. b%2=1:ab=a* a2*(b/2)=a*(a2)b/2(因为b/2之后为基数数值变小了(int)类型。5/2=2,2*(5/2)=4一样)。
  • 这样发现如果求余数的话就可以用递归的思想。
  • 比如求2100000%7.那么就是((2%7 ) * (2%7))50000=450000=((4%7)*(4%7))25000=1625000你可以看得出这三步计算就省了近75000次计算。数值越大效果越明显。
    下面给出java模板:
    输出2n %100000007的值

非递归版

import java.util.Scanner;public class Main {public static void main(String[] args) {// TODO 自动生成的方法存根Scanner sc = new Scanner(System.in);int t = sc.nextInt();for (int i = 0; i < t; i++) {long b = sc.nextLong();long c = 1000000007;long a = 2;long res = 1;a %= c;for (; b != 0; b /= 2) {if (b % 2 == 1)res = (res * a) % c;a = (a * a) % c;}System.out.println(res);}}
}

递归版(用的比较多)

import java.util.Scanner;public class Main {static long c = 1000000007;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = sc.nextInt();for (int i = 0; i < t; i++) {long a = 2;long b = sc.nextLong();long value = divide((long) 2, b);System.out.println(value % c);}}private static long divide(long a, long b) {if (b == 0)return 1;else if (b % 2 == 0) {return divide((a % c) * (a % c), b / 2) % c;} elsereturn a % c * divide((a % c) * (a % c), (b - 1) / 2) % c;}
}

如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai

快速幂模板(java)相关推荐

  1. 89. a^b【快速幂模板】

    a^b Description 求 aa 的 bb 次方对 pp 取模的值. 输入格式 三个整数 a,b,pa,b,p ,在同一行用空格隔开. 输出格式 输出一个整数,表示a^b mod p的值. 数 ...

  2. POJ3070 矩阵快速幂模板

    题目:http://poj.org/problem?id=3070 矩阵快速幂模板.mod写到乘法的定义部分就行了. 别忘了 I ( ) 和 i n i t ( ) 要传引用! #include< ...

  3. 幂运算(快速幂)Java实现

    幂运算(快速幂)Java实现 暴力幂运算 Math类下的pow(double a, double b) 快速幂(涉及位运算) 测试 暴力幂运算 public static long pow1(int ...

  4. 小肥杨训练营——快速幂模板

    文章目录 P1897 电梯里的爱情 P1428 小鱼比可爱 P2676 [USACO07DEC]Bookshelf B P4414 [COCI2006-2007#2] ABC P2637 第一次,第二 ...

  5. 快速幂+矩阵快速幂模板

    快速..运算 快速幂 运用位运算 代码 分析 矩阵快速幂 题目 分析 代码 拓一..: 快速幂 运用位运算 强大的位运算把我搞得蒙蒙的 理解了之后我表示很喜欢!!! 代码 int power(int ...

  6. How many ways?? - hdu2157(矩阵快速幂-模板)

    分析:求Map^k,刚开始没有用快速幂,TLE了   代码如下: =================================================================== ...

  7. 51nod 1113 矩阵快速幂 模板题

    1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计 ...

  8. 快速幂模板(Python)

    首先我们需要知道下面这个公式: (a^b) mod c=((a mod c)^b) mod c 现在试着用最常规的方法计算 a^b 算法一: def spow(n, m):res = 1for i i ...

  9. 洛谷1226快速幂模板

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出"b^p mod k=s" ...

最新文章

  1. python 虚拟环境 tensorflow GPU
  2. keyshot材质中文目录_KeyShot10 Pro for Ma 苹果3D渲染动画制作软件 中文版下载
  3. android 弹幕时间戳,【存档】B站直播数据包分析连载(2018-12-11更新/2020-04-12废止)...
  4. penalized_tanh可视化
  5. 模糊匹配查询_必须掌握的6个查询函数应用技巧,办公必备,收藏备用!
  6. 好程序员训练营-Java变量的作用域
  7. python中factor函数_Python基础教程
  8. Kubernetes 之资源管理
  9. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性
  10. bzoj 2844: albus就是要第一个出场
  11. 计算机图形学の三种经典画直线算法
  12. x61 linux 驱动下载,ThinkPad T61/X61换XP系统及驱动下载
  13. php加ajax,PHP – AJAX 与 PHP | 菜鸟教程
  14. jacob word另存为
  15. 安装配置ELK、安装配置ElasticSearch7.13、安装配置Kibana7.13、安装配置Logstash7.13、ElasticSearch7.13安装中文分词器
  16. linux 多线程 semaphore ,Linux下多线程编程-Pthread和Semaphore使用.doc
  17. 回声消除(AEC)原理
  18. 安装sql server 2008 报错“检查 Microsoft Visual Studio 2008 的早期版本”失败的问题解
  19. java生成pdf方法_详解Java生成PDF文档方法|chu
  20. “指定的网络名不再可用的”新解决案例

热门文章

  1. Hyperledger Fabric 核心模块(2)configtxgen工具
  2. C++ Primer 5th笔记(9)chapter9 顺序容器
  3. 数据结构--队列(链表实现)
  4. ARMV8-aarch64的寄存器介绍(二)
  5. 密码学基础知识(六)Hash函数与消息认证
  6. 【攻防世界016】re2-cpp-is-awesome
  7. 移动重定位表到新增节
  8. 2020-11-18(失败的一天)
  9. 7、 MySQL锁机制:数据库核心技术之一
  10. 15、修改和删除触发器(DROP TRIGGER)