Java黑皮书课后题第10章:*10.19(Mersenne素数)
生活随笔
收集整理的這篇文章主要介紹了
Java黑皮书课后题第10章:*10.19(Mersenne素数)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
代碼
import java.math.BigInteger;public class Test19 {public static void main(String[] args) {// 獲取小于100的所有素?cái)?shù)(int數(shù)組即可)int[] arr = new int[50];int count = 0;for (int i = 2 ; i < 100 ; i++){if (isPrimeNumber(i)){arr[count] = i;count++;}}int[] arr1 = new int[count];for (int i = 0 ; i < count ; i++){arr1[i] = arr[i];}arr = arr1;// 遍歷數(shù)組獲取Mersenne素?cái)?shù),輸出、并放在BigInteger數(shù)組中System.out.println("p\t2^p-1");BigInteger[] bi_arr = new BigInteger[count];double temp = 0;for (int i = 0 ; i < count ; i++){temp = Math.pow(2, arr[i]) - 1;if (isPrimeNumber(temp)){BigInteger bit = new BigInteger(temp + "");bi_arr[i] = bit;System.out.printf("%d\t%d\n", arr[i], (int) temp);} else {bi_arr[i] = new BigInteger("-2");}}for (int i = 0 ; i < count ; i++){if (bi_arr[i].equals(new BigInteger("2"))){for (int a = i ; a < count ; a++){bi_arr[a] = bi_arr[a+1];}}}}public static boolean isPrimeNumber(double num){for (int i = 2 ; i < num ; i++){if (num % i == 0){return false;}}return true;} }問(wèn)題
目前這一塊還是有比較多的問(wèn)題
書(shū)上明明可以使用基本數(shù)據(jù)類(lèi)型+""以轉(zhuǎn)字符
BigInteger類(lèi)也沒(méi)問(wèn)題
但是在我電腦上(新配置了JDK16)出現(xiàn)了問(wèn)題
這樣的方法轉(zhuǎn)字符串程序不認(rèn)可
直接報(bào)錯(cuò)
無(wú)法運(yùn)行
后續(xù)修改
21.9.22
把BigInteger類(lèi)改為BigDecimal方法
這樣就沒(méi)報(bào)錯(cuò),而且能運(yùn)行了
但運(yùn)行速度還是很慢
代碼
import java.math.BigDecimal;public class Test19 {public static void main(String[] args) {// 獲取小于100的所有素?cái)?shù)(int數(shù)組即可)int[] arr = new int[50];int count = 0;for (int i = 2 ; i < 100 ; i++){if (isPrimeNumber(i)){arr[count] = i;count++;}}int[] arr1 = new int[count];for (int i = 0 ; i < count ; i++){arr1[i] = arr[i];}arr = arr1;// 遍歷數(shù)組獲取Mersenne素?cái)?shù),輸出、并放在BigInteger數(shù)組中System.out.println("p\t2^p-1");BigDecimal[] bi_arr = new BigDecimal[count];double temp = 0;for (int i = 0 ; i < count ; i++){temp = Math.pow(2, arr[i]) - 1;if (isPrimeNumber(temp)){BigDecimal bit = new BigDecimal(temp + "");bi_arr[i] = bit;System.out.printf("%d\t%d\n", arr[i], (int) temp);} else {bi_arr[i] = new BigDecimal("-2");}}for (int i = 0 ; i < count ; i++){if (bi_arr[i].equals(new BigDecimal("2"))){for (int a = i ; a < count ; a++){bi_arr[a] = bi_arr[a+1];}}}}public static boolean isPrimeNumber(double num){for (int i = 2 ; i < num ; i++){if (num % i == 0){return false;}}return true;} }運(yùn)行后不到一分鐘后的結(jié)果(沒(méi)運(yùn)行完)
p 2^p-1 2 3 3 7 5 31 7 127 13 8191 17 131071 19 524287 31 2147483647總結(jié)
以上是生活随笔為你收集整理的Java黑皮书课后题第10章:*10.19(Mersenne素数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java黑皮书课后题第10章:*10.1
- 下一篇: Java黑皮书课后题第10章:*10.2