quick pow】的更多相关文章

今天讲个有趣的算法:如何快速求 \(n^m\),其中 n 和 m 都是整数. 为方便起见,此处假设 m >= 0,对于 m < 0 的情况,求出 \(n^{|m|}\) 后再取倒数即可. 另外此处暂不考虑结果越界的情况(超过 int64 范围). 当然不能用编程语言的内置函数,我们只能用加减乘除来实现. n 的 m 次方的数学含义是:m 个 n 相乘:n*n*n...*n,也就是说最简单的方式是执行 m 次乘法. 直接用乘法实现的问题是性能不高,其时间复杂度是 O(m),比如 \(3^{29}…
#include<iostream> using namespace std; #define LL long long LL qpow(LL a,LL b,LL m) { LL r=1; for(;b;b>>=1,a=a*a%m) if(b&1) r=r*a%m; return r; } 首先注意是右移mdzz 还有就是mod操作时,如果出现a很大的情况时qpow之前先让a对mod一次防止爆炸…
P1405 苦恼的小明 题目描述 黄小明和他的合伙人想要创办一所英语培训机构,注册的时候要填一张个人情况的表格,在身高一栏小明犯了愁. 身高要求精确到厘米,但小明实在太高了,无法在纸上填下这么长的数字.小明花钱买通了办事人员,于是只要写上他的身高模10007的结果就行了. 可小明不会取模,想起前几天请你帮他解决了水库的问题,于是又来找你帮忙. 输入输出格式 输入格式: 输入:(hehe.in) 小明的身高用A1^A2^...^An表示,第一行输入n,第二行输入n个正整数表示A1至An. 输出格式…
题目链接:http://poj.org/problem?id=3744 题意: 有n个地雷,位置为pos[i]. 在每个位置,你向前走一步的概率为p,向前走两步的概率为1-p. 你的初始位置为1. 问你通过雷区的概率. 题解: 表示状态: dp[i] = probability moving to i 表示走到i的概率 找出答案: ans = dp[last_mine+1] last_mine:最右边一颗雷的位置 如何转移: dp[i] = dp[i-1] * p + dp[i-2] * (1-…
目录 1. 题目 T1 双色球计数 题目描述 Sol 炼金术 题目描述 Sol T3 地铁大亨 题目描述 Sol T4 结束的派对 题目描述 Sol 算法 - 分治 1. 分治 2. 二分 3. 倍增 1. 题目 T1 双色球计数 题目描述 题目描述 小明有两种颜色的球,当然你可以想象成任意自己喜欢的颜色,但为了方便题目描述我们先暂定为红色和蓝色. 目前有 \(N\) 个红色球和 \(M\) 个蓝色球,红球被编号为 \(1 \sim N\),蓝球被编号为 \(N+1\sim N+M\),每个球都…
C++ string 用法详解 字符串分割(C++)  C++ QUICK REFERENCE Matt Mahoney, mmahoney@cs.fit.edu DECLARATIONS enum weekend {SAT,SUN};   // weekend is a type with values SAT and SUN enum weekend day;         // day is a variable of type weekend enum weekend {SAT=0,S…
先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要消耗 CPU 也不难,写一个大循环就可以了: for i = 0 to 1000000000 end 但这和 Sleep 并无本质区别.对方究竟有没有运行,我们从何得知? 所以,我们需要一个返回结果 -- 只有完整运行才有正确答案. result = 0 for i = 0 to 100000000…
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于STL中默认排序方法就是快速排序.此外,快速排序的思想--划分(Partition)思想给人很多启发.下面以非降序排序进行介绍,不求有更深的理解,只求为自己做个简要笔记. 1)划分(Partition) 划分思想十分简单,却又十分重要,应用广泛.即:将待排序数组以某一个元素为键值(Key),将比此k…
Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array. Example1: a = 2 b = [3] Result: 8 Example2: a = 2 b = [1,0] Result: 1024 Credits:Special thanks to @Stomac…
Implement pow(x, n). 这道题让我们求x的n次方,如果我们只是简单的用个for循环让x乘以自己n次的话,未免也把LeetCode上的想的太简单了,一句话形容图样图森破啊.OJ因超时无法通过,所以我们需要优化我们的算法,使其在更有效的算出结果来.我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值.还有一点需要引起我们的注意的是n有可能…