幂的运算:X的n次幂
计算X的n次幂,有多种算法
例子:计算2的62次方。
method 1 :time = 1527 纳秒。
常规思路,进行61次的乘法!
private static long mi(long X, long n) {
long start = System.nanoTime();
long result = 1;
for (long k = 0; k < n; k++) {
result *= X;
}
System.out.println(System.nanoTime()-start);
return result;
}
method 2 :time = 113 纳秒
进行拆分:2^62 = (2^31)^2 = (2^31)*(2^31) // 得到 2^31 的值的情况下,需要 1 次乘法
2^31 = (2^15)^2*2 = (2^15)*(2^15)*2 // 得到 2^15 的值的情况下,需要 2 次乘法
2^15 = (2^7)^2*2 = (2^7)*(2^7)*2 // 得到 2^7 的值的情况下,需要 2 次乘法
2^7 = (2^3)^2*2 = (2^3)*(2^3)*2 // 得到2^3 的值的情况下,需要 2 次乘法
2^3 = 2*2*2 // …………………………,需要2次乘法
所以:该方法需 2+2+2+2+1 = 9 次乘法!
/**
* 求x的n次方的值。
* 幂函数:
* x的n次幂
* @param x
* @param n
* @return
*/
public static long pow(long x, long n) { long start = System.nanoTime();
if (n == 0) {
System.out.println(System.nanoTime()-start);
return 1;
}
// 如果是偶数
if (isEven(n)) {
return pow(x * x, n / 2);
} else {
return pow(x * x, n / 2) * x;
}
} /**
* 判断x是否是偶数
*
* @param x
* @return
*/
private static Boolean isEven(long x) {
if (x % 2 == 0) {
return true;
}
if (x % 2 == 1) {
return false;
}
return false;
}
幂的运算:X的n次幂的更多相关文章
- P2699 【数学1】小浩的幂次运算
原题链接 https://www.luogu.org/problemnew/show/P2699 P2699 [数学1]小浩的幂次运算 首先第一眼看这个题就知道要暴力枚举w^i 看是否在区间[l,r] ...
- (分治法 快速幂)P1226 【模板】快速幂||取余运算 洛谷
题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 输入输 ...
- 求幂&&快速幂&&位运算
1.普通的求幂方法: 时间复杂度为O(n),对于比较大的数在1s限时内可能会TLE int pow(int base,int p){ int ans=1; for(int i=1;i<=p;i+ ...
- 矩阵快速幂——将运算推广到矩阵上HDU 1575
/* 本题的思路比较简单,就是将递推公式写出来,然后表达成为一个矩阵的形式 最后通过计算就可以得到一个符合题目要求的矩阵, 然后就是将矩阵上面所有的对角线元素相加 得到的结果即为所求的目标 */ #i ...
- 洛谷P2699小浩的幂次运算
二分走一波,没想到题解的大佬做法 p_q 注意爆long long,所以先对数取一下上限 二分确定下限,然后输出 #include<stdio.h> #include<math.h& ...
- BigDecimal 的幂次方运算
public static void main(String[] args){ BigDecimal bg1, bg2; bg1 = new BigDecimal("200000.45&qu ...
- hdu 1575 求一个矩阵的k次幂 再求迹 (矩阵快速幂模板题)
Problem DescriptionA为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据.每组数据的第一行有 ...
- POJ1026 Cipher(置换的幂运算)
链接:http://poj.org/problem?id=1026 Cipher Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- cf352E Jeff and Brackets dp+矩阵快速幂(加法+min运算)
题意大致是这样的,一共要放 m 段括号序列,每一段放 n 个括号,也就是放 n*m个括号,再每一段中的 n 个位置分别有放左括号和右括号的代价,问最终摆放出合法的括号序列的最小代价是多少. 另外保证, ...
随机推荐
- WebSocket起航 JavaScript客户端和Server通信
Message =>JSON => Move 客户端发给服务器总是Move server.send(JSON.stringify({row: row, column: column} ...
- javascript给定了日期如何获得星期几
1.这可以用JavaScript的Date对象的getDay方法.如:获取当天是星期几,则为:new Date().getDay();//返回0-6,0对应星期天,1-6对应星期一到星期六2.如果想给 ...
- win7, ubuntu双系统,重装win7后,修复引导
参考: http://blog.csdn.net/abcsunl/article/details/72875983 http://blog.csdn.net/davied9/article/detai ...
- SpringBoot - 添加定时任务
SpringBoot 添加定时任务 EXample1: import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spri ...
- 帮助类-从tfs获取数据
using JC.Helper; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.Framework.Cli ...
- Django REST Framework API Guide 01
之前按照REST Framework官方文档提供的简介写了一系列的简单的介绍博客,说白了就是翻译了一下简介,而且翻译的很烂.到真正的生产时,就会发现很鸡肋,连熟悉大概知道rest framework都 ...
- Print Article(斜率DP入门+单调队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3507 题目大意:给你n个数,然后问你怎么分割当前的这n个数位那几组,使得每一组的权值加起来最大.每一组 ...
- 列式数据库~clickhouse问题汇总
一 简介:常见的clickhouse 问题汇总 二 问题系列 1 内存问题 Code: 241. DB::Exception: Received from localhost:9000, : ...
- 项目:《JavaWeb图书管理系统视频》--代码修复还可以运行起来
1. 系统设计--项目效果图请看最后面 1技术选型 (系统架构) JSTL + JSP + Servlet + JavaBean + BeanUtils + FileUpload + JavaMail ...
- 你必须知道的几种java容器(集合类)
一.基本概念 Java容器类类库的用途是“持有对象”,并将其划分为两个不同的概念: 1)Collection:一个独立元素的序列,这些元素都服从一条或者多条规则. List必须按照插入的顺序保存元素, ...