1. 程式人生 > >Java BigInteger求任意n(n∈N*)次方根的實現

Java BigInteger求任意n(n∈N*)次方根的實現

原理是newton切線法,就不用介紹了吧

package com.swu.math;
import java.math.BigDecimal;
import java.math.BigInteger;
public class Test
{
	//num是被開方數,n是開方次數,precision設定保留幾位小數
	public static String  rootN_Decimal(String num,int n,int precision)
	{
	
		BigDecimal x=new BigDecimal(new BigInteger(num).divide(new BigInteger(n+"")));
		BigDecimal x0=BigDecimal.ZERO;
		
		BigDecimal e=new BigDecimal("0.1");
		for(int i=1;i<precision;++i)
			e=e.divide(BigDecimal.TEN,i+1,BigDecimal.ROUND_HALF_EVEN);
		
		BigDecimal K=new BigDecimal(num);
		BigDecimal m=new BigDecimal(n);
		
		long i=0;
		while(x.subtract(x0).abs().compareTo(e)>0)
		{
			x0=x;
			x=x.add(K.subtract(x.pow(n)).divide(m.multiply(x.pow(n-1)),precision,BigDecimal.ROUND_HALF_EVEN));
			++i;
		}	
		return x+" "+i;
	}
	
	public static void main(String[] args)
	{
		BigInteger b=new BigInteger("123456789123456789123456789");
		b=b.pow(10);
		System.out.println(rootN_Decimal(b.toString(), 10, 2));

	}
}

執行結果

123456789123456789123456789.00 5117

相關推薦

Java BigInteger任意n(nN*)方根實現

原理是newton切線法,就不用介紹了吧 package com.swu.math; import java.math.BigDecimal; import java.math.BigInteger; public class Test { //num是被開方數,n是開

較大整數n的階乘,因為n較大時n的階乘超出了正常類型的表示範圍,采用數組進行操作(java實現

階乘 大數字package net.yk.mlgorithm; /** * 求較大數的階乘 * @author Administrator * * @param <T> */ public class ArraysMul<T> { public static void

python 一球從n米(自己輸入)高度自由落下,每次落地後反跳回原高度的一半;再落下,它在第10落地時,共經過多少米?第10反彈多高?

次數 clas python pre spa range else 輸入 bsp n = int(input(‘落地的高度為:‘)) #ciShu = int(input(‘落地的次數:‘)) sum = 0 for ciShu in range(1,4): if

劍指offer第32題JS演算法:輸入一個整數n從1到nn個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5

題目:輸入一個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。例如輸入12,從1到12這些整數中包含1的數字有1,10,11和12,1一共出現了5次 這是我某一次去朋友公司面試試水時出的面試題,結果給我五分鐘我寫了個for迴圈的方法,被狠狠鄙視/哭笑不得 結果回來後好奇就跟同事

Java青蛙跳臺階問題(一可以跳n階)

一、問題 1、初級版 一隻青蛙跳臺階,一次可以跳1階,可以2階。那麼,臺階為n時,有多少種跳法。 2、升級版 一隻青蛙跳臺階,一次可以跳1階,可以2階,其能力足夠強大以至於一次可以跳n階。那麼,臺階為n時,有多少種跳法。 二、思路與程式碼 1、第一種情況(初級

1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。Java實現

前幾天跟同學交流聽說一個比較有意思的oj題目,具體描述如下: 題目描述: 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 輸入: 輸入可能包含多個測試樣例。 對於每個測試案例,輸

java 編寫一個函式,輸入n為偶數時,呼叫函式1/2+1/4+...+1/n,當輸入n為奇數時,呼叫函式1/1+1/3+...+1/n(利用指標函式)

題目: 編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+…+1/n,當輸入n為奇數時,呼叫函式1/1+1/3+…+1/n(利用指標函式) 程式碼: import java.util.S

1+2+3+...+n (不能使用條件語句和乘除法)(Java 劍指offer)

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 public class number { //遞迴 //利用邏輯與的短路特性實現遞迴終止 //當n==0時,(n>

java最小堆實現優先權佇列和最大的n個數問題

堆在實現優先權佇列和求最大最小的n個數問題上,有著莫大的優勢! 對於最大堆和最小堆的定義此處不再贅述,課參考網上文章:http://blog.csdn.net/genios/article/details/8157031 本文主要是對最小堆進行實現和應用,僅供新手參考。

n元一不定方程 解的個數 的 兩個版本和n實現方法

版本1:  有方程a1*x1+a2*x2+...an*xn=N,給定n(1000=>n>=1)個係數ai(1000>=ai>=0)和N(1000>=N>0),求滿足這個方程的非負整數解(x1,x2...xn)的個數。(結果對10007取模)

利用牛頓迭代法 n方根

牛頓迭代法 這裡不多說,直接上程式碼: 求平方根: public static double getPingFangRoot(double input){ if(input==0) return 0; double x0,x1; x0=input;

Java練習題-斐波那契數列第n

/** * 求斐波那契數列第n項,n<30,斐波那契數列前10項為 1,1,2,3,5,8,13,21,34,55 * @author Tang * */ public clas

有關任意一個正整數的n的因數的個數的求解思路

已知條件:n=p1^a1xp2^a2xp3^a3........xpk^ak;求解n的因數的個數; 求解的主要思想:遞迴 設所有的因數的個數為U1; 則U1會等於什麼呢? 不妨設求得p2^a2xp3^a3.......xpk^ak=U2; 則我們可以這樣考慮:

Java 實現1+2+3+…+n

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。程式碼藉助&&的短路功能,對於 A &&

輸入一個正數x和一個正整數n下列算式的值。要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n冪(即xn),兩個函數的返回值類型是double

返回值 %d time data body 一個 pow color printf 題目描述 輸入一個正數x和一個正整數n,求下列算式的值。要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn),兩個函數的返回值類型是d

46、1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

closed else while spl 判斷語句 stat 條件 執行 ret 思路:循環或者遞歸都有個結束條件和執行條件。用&&短路與代替。 //短路與&&;就是只有前一個條件滿足才可以去判斷第二個條件。 //遞歸的出口

9.9-全棧Java筆記:遍歷集合的N種方式總結&Collections工具類

java遍歷集合的N種方式總結【示例1】遍歷List方法1,使用普通for循環for(int i=0;i<list.size();i++){ //list為集合的對象名 String temp = (String)list.get(i); System.out.println

10以內的素數2,3,5,7的和為17。要求計算得出任意正整數n以內的所有素數的和。

prime rim raw_input input find turn range import port n= int (raw_input())def find_prime(n): L = list(range(2,n + 1)) m = 0 whil

1+2+3+....+n

函數指針 typedef c語言 ace pri pre sin 變量 code 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等關鍵字及條件判斷語句(a?b:c)。 1、構造函數 在類中定義靜態成員變量N和sum,

O(n log n)最長上升子序列與最長不下降子序列

clas 每一個 for spa pen pan close color style 考慮dp(i)表示新上升子序列第i位數值的最小值.由於dp數組是單調的,所以對於每一個數,我們可以二分出它在dp數組中的位置,然後更新就可以了,最終的答案就是dp數組中第一個出現正無窮的位