java整数的因式分解_如何在Java中找到整数的质数-因式分解
java整數的因式分解
編程課程中的常見家庭作業/任務之一是關于Prime Factorization。 要求您編寫一個程序以找到給定整數的素因子 。 一個數字的素數因子是將精確地除以給定數字的所有素數。 例如,素數因子35是7和5,它們本身都是素數,并且精確地除以35。上一次我上大學時做此練習,就像是編寫一個要求用戶輸入整數的程序然后在命令行中顯示該數字的素數分解。 該程序也有變種,例如,看一下本練習,編寫一個程序以提示用戶輸入正整數,并以降序顯示所有最小因子。 它與前面提到的素因數分解問題大致相同,但是有一些以降序顯示的問題。 顯示根本不是問題,您可以在命令提示符或GUI中輕松顯示它,主要是編寫邏輯來找到主要因素,這就是您將在本編程教程中學到的。 請記住,我們不能使用直接解決問題的API方法,例如,不允許您使用StringBuffer的反向方法來反向Java中的String。 您需要通過使用原始編程結構(例如控制語句,循環,算術運算符等)來編寫素數分解的核心邏輯。
在這里不拖延地介紹了我們找到主要因素的完整Java程序。 計算素數的邏輯寫在方法primeFactors(長整數)內部,這是查找素數的簡單蠻力邏輯。 我們從2開始,因為那是第一個質數,并且每個數字也可以被1整除,然后我們進行迭代,直到通過一次遞增和步進來找到質數。 當我們找到一個素數因子時,我們將其存儲在Set中,并減少數量直至循環。 為了運行該程序,您可以簡單地將其復制粘貼到文件PrimeFactors.java中,然后使用javac和java命令進行編譯和運行。 如果您發現運行此程序有任何困難,還可以參考本文以獲取有關如何從命令提示符下運行Java程序的逐步指南。
import java.util.HashSet; import java.util.Random; import java.util.Scanner; import java.util.Set;/** * Java program to print prime factors of a number. For example if input is 15, * then it should print 3 and 5, similarly if input is 30, then it should * display 2, 3 and 5. * * @author Javin Paul */ public class PrimeFactors{public static void main(String args[]) {System.out.printf("Prime factors of number '%d' are : %s %n", 35, primeFactors(35));System.out.printf("Prime factors of integer '%d' are : %s %n", 72, primeFactors(72));System.out.printf("Prime factors of positive number '%d' is : %s %n", 189, primeFactors(189));System.out.printf("Prime factors of number '%d' are as follows : %s %n", 232321, primeFactors(232321));System.out.printf("Prime factors of number '%d' are as follows : %s %n", 67232321, primeFactors(67232321));}/*** @return prime factors of a positive integer in Java.* @input 40* @output 2, 5*/public static Set primeFactors(long number) {long i;Set primefactors = new HashSet<>();long copyOfInput = number;for (int i = 2; i <= copyOfInput; i++) {if (copyOfInput % i == 0) {primefactors.add(i); // prime factorcopyOfInput /= i;i--;}}return primefactors;}}Output: Prime factors of number '35' are : [5, 7] Prime factors of integer '72' are : [2, 3] Prime factors of positive number '189' is : [3, 7] Prime factors of number '232321' are as follows : [4943, 47] Prime factors of number '67232321' are as follows : [12343, 419, 13]如果您對那個尖括號<>感到好奇,那么Java 7中引入了它的菱形運算符可以更好地進行類型推斷。 現在,您無需在表達式的兩面編寫類型參數,就像在Java 1.6中一樣,這使它們更具可讀性。 現在回到練習,如果您查看輸出,它僅返回唯一的質因數,因為我們正在使用Set接口,該接口不允許重復。 如果Interviewer要求您編寫程序將數字除以其主要因子,然后打印所有因子,則需要使用List界面而不是Set。 例如, '72 '的唯一質數為[2,3],但以質數為單位的數字為[ 2,2,2,3,3 ] 。 如果需要這種輸出,可以重寫我們的primeFactors(long number)方法以返回List <Integer> ,如下所示:
public static List<Integer> primeFactors(long number) {List<Integer> primefactors = new ArrayList<>();long copyOfInput = number;for (int i = 2; i <= copyOfInput; i++) {if (copyOfInput % i == 0) {primefactors.add(i); // prime factorcopyOfInput /= i;i--;}}return primefactors;}這是使用此版本的primeFactors(long number)方法運行相同程序的輸出。 這次您可以看到所有主要因素,而不僅僅是唯一因素。 這也解釋了Set和List界面之間的區別 ,這對初學者來說非常重要。
Prime factors of number '35' are : [5, 7] Prime factors of integer '72' are : [2, 2, 2, 3, 3] Prime factors of positive number '189' is : [3, 3, 3, 7] Prime factors of number '232321' are as follows : [47, 4943] Prime factors of number '67232321' are as follows : [13, 419, 12343]現在,是時候練習編寫一些JUnit測試了。 實際上,有兩種測試代碼的方法,一種是通過編寫main方法,調用方法并將自己的實際輸出與預期輸出進行比較。 其他更高級和首選的方法是使用單元測試框架(如JUnit)來實現。 如果您遵循測試驅動的開發,那么甚至可以在編寫代碼之前編寫測試,然后讓測試驅動您的設計和編碼。 讓我們看看我們的程序在一些JUnit測試中的表現如何。
import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import org.junit.Test;public class PrimeFactorTest {private List<Integer> list(int... factors){List<Integer> listOfFactors = new ArrayList<>();for(int i : factors){listOfFactors.add(i);} return listOfFactors;}@Testpublic void testOne() {assertEquals(list(), PrimeFactors.primeFactors(1));}@Testpublic void testTwo() {assertEquals(list(2), PrimeFactors.primeFactors(2));}@Testpublic void testThree() {assertEquals(list(3), PrimeFactors.primeFactors(3));}@Testpublic void testFour() {assertEquals(list(2,2), PrimeFactors.primeFactors(4));}@Testpublic void testSeventyTwo() {assertEquals(list(2,2,2,3,3), PrimeFactors.primeFactors(72));} }在我們的測試類 PrimeFactorsTest中,我們有五個測試用例來測試拐角案例,單個素因案例和多個素因案例。 我們還創建了一個實用程序方法list(int…ints) ,該方法利用Java 5 varargs返回給定數字的List。 您可以使用任意數量的參數(包括零)來調用此方法,在這種情況下,它將返回一個空的List。 如果您愿意,可以擴展我們的測試類以添加更多測試,例如性能測試,或一些特殊情況測試以測試我們的素因分解算法。
這是我們的JUnit測試的輸出,如果是您的新產品,還可以查看本教程,以了解如何創建和運行JUnit測試 。
這就是如何在Java中查找整數的素數。 如果您需要更多練習,還可以查看以下20個編程練習,涉及各種主題,例如LinkdList,String,Array,Logic和Concurrency。
翻譯自: https://www.javacodegeeks.com/2014/05/how-to-find-prime-factors-of-integer-numbers-in-java-factorization.html
java整數的因式分解
總結
以上是生活随笔為你收集整理的java整数的因式分解_如何在Java中找到整数的质数-因式分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生产备案编号(生产备案代码)
- 下一篇: 安卓小视频软件(安卓小视频)