首页 > 其他分享 >快速幂的思想和code实现

快速幂的思想和code实现

时间:2024-04-27 13:56:03浏览次数:24  
标签:code 20 思想 double long qmi res return 快速

 

解法:浮点数快速幂的应用

快速幂的思想就是倍增的思想

5的20次方

如果是一次一次乘需要5*5*5*5*5*5……… 20次乘法

快速幂就是 20(10)=00010100(2)

20=4+16

所以原来的就变成了:

(a)(*)(a)a2

(a*a) (*) (a*a) a4

((a*a)*(a*a)) (*) ((a*a)*(a*a)) a8

(((a*a)*(a*a)) * ((a*a)*(a*a)))  (*) (((a*a)*(a*a)) * ((a*a)*(a*a))) a16

(a16)(*)(a4)

总共5次运算

20------》5

#include <bits/stdc++.h>

using namespace std;

class Solution {

   private:

      double qmi(double a, long long b) {

          double  res = 1.0;

          while (b) {

             if (b & 1)

                res = res * 1ll * a;

             a = a * 1ll * a;

             b >>= 1;

          }

          return res;

      }

   public:

      double myPow(double x, int n) {

          long long N = n;

          return N >= 0 ? qmi(x, N) : 1.0 / qmi(x, -N);

      }

};

int main() {

   Solution s;

   auto res = s.myPow(5, 20);

   printf("%.6lf", res);

   return 0;

}

标签:code,20,思想,double,long,qmi,res,return,快速
From: https://www.cnblogs.com/FJCLJ/p/18161971

相关文章

  • 使用 chezmoi & vscode, 管理你的 dotfiles
    什么是dotfilesInUnix-likeoperatingsystems,anyfileorfolderthatstartswithadotcharacter(forexample,/home/user/.config),commonlycalledadotfileordotfile.任何以.开头去命名的文件或者目录都可以称为dotfile,在Unix-like系统一般用的比较多......
  • 快速幂定义
    1.参考参考:数据结构与算法-矩阵快速幂2.思路如果直接求取M^n,时间复杂度是O(n),可以用快速幂算法来加速这里M^n的求取,简化时间复杂度为O(logn)主体思路就是不求M^n而是求M^(n/2),然后先不求M^(n/2),先求M^(n/4)代码1.递归实现快速幂最直接的写法是使用递归:(求......
  • vscode debug: #include errors detected. Please update your includePath
    比如说文件树如下-src-x.cpp-x.hpp那么在x.cpp中直接#include"x.hpp"是没问题的,因为这个按相对路径来说可以直接搜到 但是如果文件树如下-src-x.cpp-head-x.hpp由于x.cpp和x.hpp不在同一个文件夹下,所以需要按相对路径如下#include".......
  • LeetCode三则
    72.编辑距离给你两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入:word1="horse",word2="ros"输出:3解释:horse->rorse(将'h'替换为'r')rorse->rose(删......
  • Codeforces Round 936 (Div. 2)
    A考虑有\(x\)个数与中位数相同,且在中位数之后,则答案为\(x+1\)(+1是因为中位数本身)。B明显的,每次操作序列的最大子段和。那么操作完以后,继续操作这个区间即可,相当于每次翻倍。假设原序列最大子段和为区间\([l,r]\),则答案为:\[sum(1,n)-sum(l,r)+sum(l,r)\times2^k\]记......
  • vue3 快速入门系列 —— 状态管理 pinia
    其他章节请看:vue3快速入门系列Piniavue3状态管理这里选择pinia。虽然vuex4已支持Vue3的CompositionAPI,但是vue3官网推荐新的应用使用pinia——vue3pinia集中式状态管理redux、mobx、vuex、pinia都是集中式状态管理工具。与之对应的就是分布式。Pinia符......
  • 矩阵快速幂
    1.参考参考:【矩阵快速幂】简单题学「矩阵快速幂」2.定义2.1定义如果直接求取M^n,时间复杂度是O(n),可以定义矩阵乘法,然后用快速幂算法来加速这里M^n的求取,简化时间复杂度为O(logn)主体思路就是不求M^n而是求M^(n/2),然后先不求M^(n/2),先求M^(n/4)具体实现同......
  • 抖音商单信息通过ETL工具快速同步
    一、抖音平台抖音是一款热门的短视频社交平台,拥有海量用户和高度活跃的商业生态。在抖音上,商家可以开设商铺并发布商品,消费者可以在平台上购买商品并获得优惠。同时,抖音也是一个广告平台,商家可以通过购买广告位来宣传产品。在这样一个大环境下,商家和消费者都需要保持良好的数据同......
  • 代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
    作为一名开发者,你一定遇到过在编写代码时出现的各种错误。这些错误可能是语法错误、运行时错误或者逻辑错误。处理这些错误通常需要花费大量的时间和精力,特别是当你对错误的原因一无所知时。CodeGeeX的v2.7.4版本最新上线的代码修复和错误解释功能,让你在解决代码错误的问题上,变得......
  • leedcode-第三大的数
    自己写的,用时很长fromtypingimportListclassSolution:defthirdMax(self,nums:List[int])->int:#计算输入列表的长度n=len(nums)#对列表进行冒泡排序,将较大的元素排在前面foriinrange(n-1):forjinra......