超级次方

你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。

示例 1:

输入: a = 2, b = [3]

输出: 8

示例 2:

输入: a = 2, b = [1,0]

输出: 1024

解题思想

这道题需要计算 a^b % c 的值,其中b非常的大,大到只能使用数组来表示。这道题是ACM里面常见的快速幂的解题方式,这其中有一个数学的推论,可以看我代码里附带的那个解释。

总之,这个公式的意思就是,(a*b)%c=(a%c)*(b%c),因此我们可以在每一步计算结果之后都这么处理,防止溢出。

第二个算法部分其实很容易理解,就是可以做类似于二分的分割,比如当b是偶数的时候,我们可以转化为计算a^(b/2)后再平方,而对于基础,则再乘一个a就可以,总之你看代码就知道了

 1 public class Solution {
 2     // 判断是否大于0
 3     public static boolean morethanzero(int[] x){
 4         for(int i=x.length-1;i>=0;i--){
 5             if(x[i]>0)
 6                 return true;
 7         }
 8         return false;
 9     }
10     //高精度除法
11     public static void div(int[] x,int y){
12         int tmp=0;
13         for(int i=0;i<x.length;i++){
14             x[i] += tmp*10;
15             tmp = x[i] % y;
16             x[i] = x[i] /y;
17         }
18     }
19
20     public static int superPow(int a, int[] b) {
21         if (morethanzero(b) == false)
22             return 1;
23         a=a%1337;
24         boolean isEven = false;
25         if(b[b.length-1] % 2 == 0)
26             isEven = true;
27         div(b,2);
28         int result = superPow(a,b);
29         result = result % 1337;
30         result*=result;//result由于div分成了两部分,现在把两部分合在一起
31         result = result % 1337;
32         if(isEven==false){
33             result*=a;//奇数的话,再乘以a
34             result = result % 1337;
35         }
36         return result;
37     }
38 }

转载于:https://www.cnblogs.com/kexinxin/p/10235315.html

Leetcode 372.超级次方相关推荐

  1. Java实现 LeetCode 372 超级次方

    372. 超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8 示例 2: ...

  2. LeetCode 372. 超级次方(快速幂)

    1. 题目 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8示例 2: 输入: a ...

  3. C#刷遍Leetcode面试题系列连载(6):No.372 - 超级次方

    点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工 ...

  4. leetcode 372. Super Pow | 372. 超级次方(快速幂)

    题目 https://leetcode.com/problems/super-pow/ 这道题的赞踩比例,让人觉得是个大坑- 题解 快速幂,看了答案:C++ Clean and Short Solut ...

  5. 文巾解题 372. 超级次方

    1 题目描述 2  解题思路 2.1 直接算pow 直接算b数组对应的值是多少,然后进行pow 求幂 class Solution:def superPow(self, a: int, b: List ...

  6. 【解题报告】Leecode 372. 超级次方——Leecode每日一题系列

    题目链接:https://leetcode-cn.com/problems/super-pow/ 题解汇总:https://leetcode-cn.com/problems/max-increase- ...

  7. 数学 - 超级次方 - Leetcode 372

    数学 - 超级次方 - Leetcode 372 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入:a = 2, b = [3 ...

  8. LeetCode——517. 超级洗衣机(Super Washing Machines)[困难]——分析及代码(C++)

    LeetCode--517. 超级洗衣机[Super Washing Machines][困难]--分析及代码[C++] 一.题目 二.分析及代码 1. 贪心 (1)思路 (2)代码 (3)结果 三. ...

  9. 23 - x的平方根,快速幂,超级次方

    文章目录 1. x的平方根 2. 快速幂 3. 超级次方 1. x的平方根 二分查找 class Solution {public:int mySqrt(int x) {int left = 1, r ...

  10. leetcode 超级次方

    题目链接 分析:b数组可以看成一个超级大的正数,那么就是求a的b次方,然后对1337取模. 假设b = 4321,a=3 知识点:快速幂,取模分配律 取模分配律: (a⋅b) * mod m = [ ...

最新文章

  1. 简书上的大牛总结的 ServerSocket Accept() 的确是阻塞方法 与猜想一致 一些理解 转载如下
  2. 怎么往integer型数组添加数据_用户日活月活怎么统计 - Redis HyperLogLog 详解
  3. 算法-----------猜数字大小
  4. 在EA中画ER图和数据模型图
  5. 【UEditor】介绍
  6. 2020-08-21 光纤通信第四章知识点整理
  7. 基于linux的地震数据处理软件的设计与实现,地震数据处理软件系统与应用实验指导书...
  8. 我在51cto博客安家了!
  9. Spring Boot学习
  10. fiddler自定义显示目标IP和时间
  11. Ubuntu 如何定制桌面解放你的个性?
  12. 微课有关计算机应用基础,【计算机仿真论文】微课在计算机应用基础课的应用(共3802字)...
  13. 易语言PHP自动更新,易语言自动更新源码
  14. Profibus DP新总结
  15. MES系统和RRP之间需要交换哪些数据?
  16. WPF 基本控件的介绍
  17. python expect模块pexpect简单应用
  18. 重装linux后没声音,笔记本电脑安装ubuntu系统后外放没有声音 ,耳机正常,三步解决办法...
  19. 《UNIX网络编程》配置unp.h头文件
  20. Vivado 工程文件的结构

热门文章

  1. python tfidf特征变换_2 python 文本特征提取 CountVectorizer, TfidfVectorizer
  2. 如何查看进程的socket_socket编程1--创建socket
  3. sublime text3怎么运行python代码_怎么用sublime text 3搭建python 的ide?
  4. 产生随机数(rand()函数和srand()函数)的含义
  5. windows php7怎么配置,PHP7在windows7中的环境配置详解
  6. CNN是如何一层一层'理解'图像信息的
  7. 自动驾驶 9-3: 走向非线性 - 扩展卡尔曼滤波器 Going Nonlinear - The Extended Kalman Filter
  8. AWS AI网络研讨会 webinar - Case 分享
  9. 单元测试的必要性 从bug修复 费用成本和时间成本综合考虑
  10. 获取以及自定义User-Agent在URLSession, NSURLConnection, WKWebView iOS