快速幂----快速求解底数的n次幂
创始人
2024-05-29 15:05:00
0

目录

一.快速幂

1.问题的引入

2.快速幂的介绍

3.核心思想

4.代码实现

 2.猴子碰撞的方法数

1.题目描述

2.问题分析

3.代码实现


一.快速幂

1.问题的引入

问题:求解num的n次幂,结果需要求余10^9+7

对于这个问题我们可能就是直接调用函数pow(a,b)来直接求解a的b次幂问题,但是如果求解的结果很大,超过的double的数值范围,我们要求对最终的结果求余10^9+7,我们如果直接调用pow()函数的话,求解出来的数已经超出了double的最大范围,根本无法求出,这个时候我们是否可以考虑在求解的过程中每一次的结果都求余10^9+7,而不是只在最终的结果求余10^9+7这样最终的结果肯定是小于10^9+7,一定不会超出最大的范围.

2.快速幂的介绍

快速幂:快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N),与朴素的O(N)相比效率有了极大的提高。

3.核心思想

例如计算3^{^{10}},10的二进制为1010,相当于求解3^{1010}次方

3^{^{10}}=3*3*3*3*3*3*3*3*3*3

=(3*3)*(3*3*3*3*3*3*3*3)

=3^{2}*3^{8}

相当于我们每次对10的二进制的每一个位置求权(如果是二进制这个位是1),则乘以当前的叠加的数,

例如进行求余3^{^{10}}的步骤 :

定义变量ans保存3^{^{10}}的结果   1010位10的二进制表达方式

1010的第一位为0,这个时候num=num*num=3^{2};    二进制形式为:3^{0010}

1010的第二位为0,这个时候求权为1,ans=ans*num=3^{2}  num=num*num=3^{4};二进制形式为:3^{0100}

1010的第三位为0,这个时候num=num*num=3^{8}; 二进制形式为:3^{1000}

1010的第四位为1,这个时候求权为1,ans=ans*num=3^{2}*3^{8}  num=num*num=3^{16};

4.代码实现

1.求余10^9+7的版本,返回数据类型为int的结果

    public int quickPow(long num,int n){long ans=1;long mod=1000000007;while(n!=0){if((n&1)==1)ans=(ans*num)%mod;num = num * num % mod;n>>=1;}return (int)(ans%mod);}

 2.不求余的版本,返回数据类型为long的结果

    public long quickPow(long num,int n){long ans=1;while(n!=0){if((n&1)==1)ans=ans*num;num = num * num;n>>=1;}return ans;}

 2.猴子碰撞的方法数

1.题目描述

现在有一个正凸多边形,其上共有 n 个顶点。顶点按顺时针方向从 0n - 1 依次编号。每个顶点上 正好有一只猴子 。下图中是一个 6 个顶点的凸多边形。

 

每个猴子同时移动到相邻的顶点。顶点 i 的相邻顶点可以是:

  • 顺时针方向的顶点 (i + 1) % n ,或
  • 逆时针方向的顶点 (i - 1 + n) % n

如果移动后至少有两个猴子位于同一顶点,则会发生 碰撞

返回猴子至少发生 一次碰撞 的移动方法数。由于答案可能非常大,请返回对 109+7 取余后的结果。

注意,每只猴子只能移动一次。

力扣: 力扣

2.问题分析

正难则反,题目问的是至少发生一次碰撞的移动次数,我们不妨把问题转换为求解猴子一次都不碰撞的次数,猴子一共有2的n次幂中跳跃的方式,求中有两种是一次都不碰撞的,一种是猴子全部顺时针进行跳跃,一种是猴子逆时针进行跳跃,所以猴子至少发生一次碰撞的次数=猴子总共的移动次数-2

3.代码实现

    public int monkeyMove(int n) {long ans=1,a=2;long mod=1000000007;while(n!=0){if((n&1)==1)ans=(ans*a)%mod;a = a * a % mod;n>>=1;}return (int)((ans+mod-2)%mod);}

 

 

相关内容

热门资讯

安卓手机的rom系统,功能丰富... 你有没有发现,安卓手机的ROM系统就像是一层神秘的面纱,包裹着你的手机,让它焕发出不一样的光彩?今天...
宝马安卓系统音源切换,一触即达 你有没有发现,开宝马的时候,音乐播放的体验也是相当重要的呢?想象当你驾驶着宝马,窗外的风景如画,而车...
安卓怎样删除系统更新,轻松恢复... 手机系统更新了,是不是觉得新功能超酷,但有时候更新后的系统反而有点小闹心?别急,今天就来手把手教你如...
国内安卓系统知乎,知乎视角下的... 你知道吗?在我国,安卓系统可是占据了手机市场的大半壁江山。而关于这个话题,知乎上可是讨论得如火如荼。...
安卓登录linux系统下载,下... 你有没有想过,你的安卓手机竟然能登录Linux系统呢?没错,就是那个在服务器上大显神威的Linux!...
安卓系统怎么弹窗广告,Andr... 你有没有发现,手机上时不时就会跳出来一些广告,让人烦不胜烦?尤其是安卓系统的手机,弹窗广告更是让人头...
安卓系统能运行tomcat,基... 你有没有想过,安卓系统竟然能运行Tomcat?这可不是什么天方夜谭,而是实实在在的技术实现。想象你的...
小米减少安卓系统耗电,深度解析... 你知道吗?最近小米手机界可是掀起了一阵小风波呢!那就是——小米减少安卓系统耗电的大动作!是不是听起来...
原生系统的安卓电视,体验流畅智... 你有没有想过,家里的电视竟然也能像智能手机一样,玩转各种应用和游戏?没错,这就是原生系统的安卓电视的...
老版电脑装安卓系统,探索安卓系... 你有没有想过,那些曾经陪伴我们度过无数时光的老版电脑,现在竟然也能装上安卓系统呢?这可不是天方夜谭,...
安卓系统查看mac地址,安卓系... 你有没有想过,你的安卓手机里隐藏着一个小秘密——那就是它的MAC地址!这个看似普通的数字组合,其实能...
ios系统和安卓系统的比较,全... 你有没有想过,为什么你的手机里装的是苹果的iOS系统,而朋友的手机却是安卓的呢?这两种系统各有各的特...
不是基于安卓的系统,多元化移动... 你知道吗?在科技的世界里,有一种操作系统,它可不是什么安卓哦!今天,就让我带你一起探索这个神秘的世界...
苹果上安卓系统游戏,揭秘跨平台... 你有没有想过,那些在苹果手机上玩得如痴如醉的游戏,竟然也能在安卓系统上畅游?没错,就是那种一触即发、...
安卓鸿蒙苹果系统对比,三大操作... 你有没有发现,现在手机市场上的操作系统之争越来越激烈了?安卓、鸿蒙、苹果,这三个名字几乎成了智能手机...
安卓系统所有暗码大全,暗码大全... 你有没有遇到过那种手机解锁时突然冒出个暗码,让你一头雾水的情况?别急,今天就来给你揭秘安卓系统所有暗...
安卓p原生系统样子,安卓P原生... 你有没有注意到,你的安卓手机最近是不是变得不一样了?没错,就是那个安卓P原生系统,它悄悄地来了,带来...
如何把harmony系统改为安... 你是不是也对Harmony系统有点儿腻味了,想要换换口味,试试安卓系统的魅力呢?别急,今天就来手把手...
郑州安卓会议视频系统,高效便捷... 你有没有想过,在繁忙的会议中,如何让每个人都能清晰地看到演示内容呢?今天,就让我带你走进郑州安卓会议...
安卓平板怎么备份系统,全方位备... 你有没有想过,如果你的安卓平板突然“罢工”了,里面的资料怎么办?别急,今天就来教你怎么备份系统,让你...