快速幂模板(java)

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

前言



知道快速幂首先要知道(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;
    } else
      return a % c * divide((a % c) * (a % c), (b - 1) / 2) % c;
  }
}


目录
相关文章
|
3月前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
42 6
|
3月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
129 1
|
3月前
|
Java
Java PDF模板生成PDF
Java PDF模板生成PDF
62 1
|
3月前
|
小程序
java--微信小程序发送模板消息
java--微信小程序发送模板消息
152 0
|
5月前
|
小程序 Java
【aspose-words】Aspose.Words for Java模板语法详细剖析
本文通过详细分析Aspose.Words for Java模板语法,介绍了使用条件块、变量和动态合并表格单元格三个常用模板标签,并结合实际案例进行演示。通过这三个标签的实操,帮助读者更好地掌握Aspose.Words的使用技巧。此外,还提供了官方文档链接以便进一步学习。
170 0
【aspose-words】Aspose.Words for Java模板语法详细剖析
|
5月前
|
Java
Java系列之 IDEA 为类 和 方法设置注解模板
这篇文章介绍了如何在IntelliJ IDEA中为类和方法设置注解模板,包括类模板的创建和应用,以及两种不同的方法注解模板的创建过程和实际效果展示,旨在提高代码的可读性和维护性。
|
4月前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
1688 0
|
6月前
|
存储 Java 应用服务中间件
Java中套路和实现问题之基于组合/模板的套路常见框架中的应用有什么
Java中套路和实现问题之基于组合/模板的套路常见框架中的应用有什么
|
5月前
|
JavaScript Java Python
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
【Azure 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
|
7月前
|
算法 Java 数据处理
Java算法模板 数据流快读
Java算法模板 数据流快读
53 2