Leetcode 372.超级次方
超级次方
你的任务是计算 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.超级次方相关推荐
- Java实现 LeetCode 372 超级次方
372. 超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8 示例 2: ...
- LeetCode 372. 超级次方(快速幂)
1. 题目 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8示例 2: 输入: a ...
- C#刷遍Leetcode面试题系列连载(6):No.372 - 超级次方
点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工 ...
- leetcode 372. Super Pow | 372. 超级次方(快速幂)
题目 https://leetcode.com/problems/super-pow/ 这道题的赞踩比例,让人觉得是个大坑- 题解 快速幂,看了答案:C++ Clean and Short Solut ...
- 文巾解题 372. 超级次方
1 题目描述 2 解题思路 2.1 直接算pow 直接算b数组对应的值是多少,然后进行pow 求幂 class Solution:def superPow(self, a: int, b: List ...
- 【解题报告】Leecode 372. 超级次方——Leecode每日一题系列
题目链接:https://leetcode-cn.com/problems/super-pow/ 题解汇总:https://leetcode-cn.com/problems/max-increase- ...
- 数学 - 超级次方 - Leetcode 372
数学 - 超级次方 - Leetcode 372 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入:a = 2, b = [3 ...
- LeetCode——517. 超级洗衣机(Super Washing Machines)[困难]——分析及代码(C++)
LeetCode--517. 超级洗衣机[Super Washing Machines][困难]--分析及代码[C++] 一.题目 二.分析及代码 1. 贪心 (1)思路 (2)代码 (3)结果 三. ...
- 23 - x的平方根,快速幂,超级次方
文章目录 1. x的平方根 2. 快速幂 3. 超级次方 1. x的平方根 二分查找 class Solution {public:int mySqrt(int x) {int left = 1, r ...
- leetcode 超级次方
题目链接 分析:b数组可以看成一个超级大的正数,那么就是求a的b次方,然后对1337取模. 假设b = 4321,a=3 知识点:快速幂,取模分配律 取模分配律: (a⋅b) * mod m = [ ...
最新文章
- 简书上的大牛总结的 ServerSocket Accept() 的确是阻塞方法 与猜想一致 一些理解 转载如下
- 怎么往integer型数组添加数据_用户日活月活怎么统计 - Redis HyperLogLog 详解
- 算法-----------猜数字大小
- 在EA中画ER图和数据模型图
- 【UEditor】介绍
- 2020-08-21 光纤通信第四章知识点整理
- 基于linux的地震数据处理软件的设计与实现,地震数据处理软件系统与应用实验指导书...
- 我在51cto博客安家了!
- Spring Boot学习
- fiddler自定义显示目标IP和时间
- Ubuntu 如何定制桌面解放你的个性?
- 微课有关计算机应用基础,【计算机仿真论文】微课在计算机应用基础课的应用(共3802字)...
- 易语言PHP自动更新,易语言自动更新源码
- Profibus DP新总结
- MES系统和RRP之间需要交换哪些数据?
- WPF 基本控件的介绍
- python expect模块pexpect简单应用
- 重装linux后没声音,笔记本电脑安装ubuntu系统后外放没有声音 ,耳机正常,三步解决办法...
- 《UNIX网络编程》配置unp.h头文件
- Vivado 工程文件的结构
热门文章
- python tfidf特征变换_2 python 文本特征提取 CountVectorizer, TfidfVectorizer
- 如何查看进程的socket_socket编程1--创建socket
- sublime text3怎么运行python代码_怎么用sublime text 3搭建python 的ide?
- 产生随机数(rand()函数和srand()函数)的含义
- windows php7怎么配置,PHP7在windows7中的环境配置详解
- CNN是如何一层一层'理解'图像信息的
- 自动驾驶 9-3: 走向非线性 - 扩展卡尔曼滤波器 Going Nonlinear - The Extended Kalman Filter
- AWS AI网络研讨会 webinar - Case 分享
- 单元测试的必要性 从bug修复 费用成本和时间成本综合考虑
- 获取以及自定义User-Agent在URLSession, NSURLConnection, WKWebView iOS