1. 程式人生 > >Java大整數快速冪

Java大整數快速冪

〇.簡介
①BigInteger:支援任意精度的整數,可以精確地表示任意大小的整數值,同時在運算過程中不會丟失任何資訊。
②BigDecimal:可以精確地表示任意精度的小數,同時在運算過程中不會丟失任何資訊。
一.常用操作

valueOf(BigInteger val)//將引數轉換為大整數型別
abs()//求絕對值 
add(BigInteger val)//加法
subtract(BigInteger val)//減法(this - val)
multiply(BigInteger val) //乘法
divide(BigInteger val)//除法(this / val)
remainder(BigInteger val)
//取模 mod(BigInteger val); //同上 gcd(BigInteger val)//求最大公約數 negate(BigInteger val); //求相反數 boolean equals(BigInteger val)//比較是否相等 compareTo(BigInteger val)//比較,返回值1、0、-1分別表示大於、等於、小於 pow(intexponent) //返回當前大數的exponent次冪 toString()//返回此BigInteger的十進位制字串表示形式 toString(intradix)//返回此BigInteger的給定基數(radix進位制)的字串表示形式 BigInteger(String val)
//將字串轉換為大整數型十進位制表示形式 BigInteger(String val,int radix)//將指定基數的字串轉換為BigInteger型

注意:不能直接用符號如+、-來使用大數字
二.基本常量

A=BigInteger.ONE //=1
B=BigInteger.TEN //=10
C=BigInteger.ZERO //=0

三.程式碼

import java.io.*;//標頭檔案
import java.math.*;
import java.util.*;
import java.text.*;

public class Main 
{
    public static BigInteger QuickPow01
(int n)//遞迴版快速冪 { BigInteger ans;//定義變數 if(n == 1)//邊界 return BigInteger.valueOf(2);//取值 ans = QuickPow01(n / 2);//遞迴 ans = ans.multiply(ans);//乘法 if(n % 2 == 1) ans = ans.multiply(BigInteger.valueOf(2)); return ans;//返回 } public static BigInteger QuickPow02 (int n)//迴圈版快速冪 { BigInteger ans = BigInteger.valueOf(1); BigInteger base = BigInteger.valueOf(2);//底數 while(n > 0) { if(n % 2 == 1) ans = ans.multiply(base);//ans * base n /= 2; base = base.multiply(base);//base * base } return ans; } public static void main(String[] args) { Scanner cin = new Scanner(System.in); int p;//定義變數 p = cin.nextInt();//輸入p //System.out.println((int)(p * Math.log(2) / Math.log(10)) + 1);//輸出2的p次方減1的位數 BigInteger num = QuickPow02(p); System.out.println(num);//輸出2的p次方 } }

據筆者測試,最多能輸出2800位左右,即2的9800次方

相關推薦

Java整數快速

〇.簡介 ①BigInteger:支援任意精度的整數,可以精確地表示任意大小的整數值,同時在運算過程中不會丟失任何資訊。 ②BigDecimal:可以精確地表示任意精度的小數,同時在運算過程中不會

整數快速與矩陣快速算法詳解

-m 技術分享 .com 需要 作用 鏈接 結合 奇數 title 轉載自:https://www.cnblogs.com/cmmdc/p/6936196.html 以防鏈接失效以失去如此好的博客,故復制一份以防丟失。 矩陣快速冪基礎講解 1.基礎知識儲備篇 矩陣的相關運

Java整數的處理

大整數的方法返回的不是一個字串,而是this val  如果出現連續大整數處理,就需要把它變成字串 方法參考下面程式碼: import java.math.BigInteger; import java.util.Scanner; public class Wn { publi

java整數相加

-- 正整數相加 /* * description: 1. 反轉 2. 補0 3. 計算 4. 最後結果反轉 * @author maduar * @date 21/11/2018 10:15 PM * @email [email protected] * * */ public

整數快速(取模)、矩陣快速及其應用

1 #include <cstdio> 2 #include <cstring> 3 typedef long long ll; 4 const int mod = 998244353; 5 struct Matrix { 6 ll x[2][2]; 7 };

java整數模版

importjava.math.BigInteger;   publicclassabc   {       publicstaticvoidmain(String[] args)       {           BigInteger bigInteger1=newB

整數快速講解

我們先來看,要求一個整數的 n 次冪,普通的方法的話,是不是需要乘以 n 次這個數?這裡如果冪次非常大的話,肯定會非常耗時,所以有超時的危險,也是有很多卡時間的題的,所以這裡就牽涉到一個快速冪的思想: 所謂快速冪,就是快速求冪次。我們知道,所有的數字,都可以用二進位制來表示對吧,比如 21

Java整數運算之計算1!+2!+…+100!的總和.

最近開了Java課程,可是課後習題似乎有點超前了一點點,莫非老師要鍛鍊我們的動手能力……………….. Java大整數運算轉載 import java.util.*; import java.math

HDU 4704 SUM 整數快速+費馬小定理

題目描述: 分析: 題目要求s1+s2+s3+…+sn;(si表示n劃分i個數的n的劃分的個數,如n=4,則s1=1,s2=3) 假設An=s1+s2+s3+…+sn, 對於n可以先劃分

java整數的乘方問題處理

最近做OJ,發現java自帶的類庫好像沒有大整數乘方的方法,後來自己想了下,可以換一種方式實現: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRe

JAVA 整數加法的實現

/** * 整數加法 * * @param lv * 左值 * @param rv * 右值 * @param result * 相加的結果 * @數值存放說明 數值的每

整數快速

在計算機中如何快速計算整數的N次冪(N為正整數) 我們最先想到的是使用for迴圈去一個一個相乘    (有n個x) 這個是最基本的想法     還有另一個想法就是使用相同底數相乘  冪相加的原理 = 而且19的二進位制

快速整數快速+矩陣快速

閒的無聊,總結一下快速冪的演算法,一直在用偏移運算子,現在試試多種方法: 快速冪就是求一個數的m次方的快速求法,因為正常情況下求次方可能就是一個數迴圈m次,然後乘一下,低次冪還好有一點,但是碰見高次的就不好辦了,比如: 求2的10次方,這個很好辦,for迴圈10次: #

乘積 快速 爆 longlong

連結:https://www.nowcoder.com/acm/contest/110/A來源:牛客網題目描述這題要你回答T個詢問,給你一個正整數S,若有若干個正整數的和為S,則這若干的數的乘積最大是多少?請輸出答案除以2000000000000000003(共有17 個零)

Java 整數減法

求兩個大的正整數相減的差。 輸入 共2行,第1行是被減數a,第2行是減數b(a > b)。每個大整數不超過200位,不會有多餘的前導零。 輸出 一行,即所求的差。 樣例輸入 99999

java 整數開方模板與常用方法

BigInteger開方:public static BigInteger Sqrt(BigInteger xx) { BigDecimal x=new BigDecimal(xx); BigD

矩陣快速&求斐波那契&poj3070(java

題目連結 核心思想為: 從右往左。可以一直遞推,然後到最後一項,然後快速冪求矩陣,矩陣最終的結果就是所求結果。 import java.util.Scanner; public class testF

快速演算法和整數求模

** 1.快速冪的演算法** (1)當我們求一個數的n次方的的結果時,若直接選擇for迴圈,來累乘的話,效率很低,時間複雜度位O(n),而當我們選擇快速冪來計 算時,時間複雜度能達到O(logn),快了很多。快速冪

hdu 4704 sum 整數取模+費馬小定理+數快速

求輸入的n可以有幾種拆分情況: 如: 2-->(2,11)2種 3-->(3,21,12,111)4種 4-->(4,31,13,22,211,112,121,1111)8種 發現規律 結果 = 2^(n-1),再取模得到要求的即為 2^(n-1)%mod

基於Java整數運算的實現(加法,減法,乘法)學習筆記

-1 urn 相加 his add oid one 我會 後來 大整數,顧名思義就是特別大的整數。 一臺64位的機器最大能表示的數字是2的64次方減一: 18446744073709551615 java語言中所能表示的整數(int)最小為-2147483648 pu