演算法基礎-典型靜態方法實現-01
阿新 • • 發佈:2019-01-29
package cn.edu.ylanhds.fabl.mathematical.formula; /** * 一些不怎麼常用的數學公式的JAVA程式碼 * * @author fablen * */ public class CommonDivisor { public static void main(String [] args) { CommonDivisor commonDivisor = new CommonDivisor(); System.out.println(commonDivisor.gcd(1125, 855)); System.out.println(commonDivisor.abs(9)); System.out.println(commonDivisor.abs(9.5)); System.out.println(commonDivisor.isPrime(8)); System.out.println(commonDivisor.sqrt(8.0)); System.out.println(commonDivisor.hypotenuse(3.0,4.0)); System.out.println(commonDivisor.H(2)); } /** * 計算兩個非負整數P和q的最大公約數;若q是0,則最大公約數為p.否則, * 將p除以q得到餘數r,p和q的最大公約數即為q和r的最大公約數 * @param p * @param q * @return */ public static int gcd(int p, int q) { if (q == 0) { return p; } int r = p % q; return gcd(q, r); } /** * 計算一個整數的絕對值 * @param x * @return */ public static int abs(int x) { if(x<0) { return -x; }else { return x; } } /** * 計算一個浮點數的絕對值 * @param x * @return */ public static double abs(double x) { if(x< 0.0) { return -x; }else { return x; } } /** * 判斷一個數是否是素數 * @param N * @return */ public static boolean isPrime(int N) { if (N < 2) { return false; } for (int i = 2; i*i <=N ; i++) { if (N % i == 0) { return false; } } return true; } /** * 計算平方根(牛頓迭代法) * @param c * @return */ public static double sqrt(double c) { if (c < 0) { return Double.NaN; } double err = 1e-15; double t = c; while (Math.abs(t-c/t) > err * t) { t = (c/t + t)/2.0; } return t; } /** * 計算直角三角形的斜邊 * @param a 邊長a * @param b 邊長b * @return */ public static double hypotenuse(double a, double b) { return Math.sqrt(a*a + b*b); } /** * 計算調和級數 * @param N * @return */ public static double H(int N){ double sum = 0.0; for(int i = 1; i<= N;i++) { sum += 1.0/i; } return sum; } }
本文是學習《演算法》一書中的程式碼的實現筆記。