日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

如何在Java中找到整数的质因数–因式分解

發布時間:2023/12/3 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在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接口,該接口不允許重復。 如果您的采訪員要求您編寫程序以將數字除以其主要因子,并打印所有因子,那么您需要使用“列表”界面而不是“設置”。 例如, '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。

  • 如何在Java中不使用臨時變量的情況下交換兩個數字? ( 把戲 )
  • 如何檢查LinkedList是否包含Java循環? ( 解決方案 )
  • 編寫程序以檢查數字是否為2的冪? ( 回答 )
  • 如何通過一遍查找LinkedList的中間元素? (有關解決方案,請參見此處 )
  • 如何檢查數字是否為素數? ( 解決方案 )
  • 編寫程序來查找給定數字的斐波那契數列? ( 解決方案 )
  • 如何檢查號碼是否是阿姆斯特朗號碼? ( 解決方案 )
  • 編寫一個程序來防止Java死鎖? (單擊此處獲取解決方案)
  • 編寫一個程序來解決Java中的Producer Consumer問題。 ( 解決方案 )
  • 如何在不使用API??方法的情況下反轉Java中的String? ( 解決方案 )
  • 編寫程序來使用Java中的遞歸來計算階乘? (單擊此處獲取解決方案)
  • 如何檢查數字是否為回文? ( 解決方案 )
  • 如何檢查數組是否包含重復的數字? ( 解決方案 )
  • 如何從Java中的ArrayList中刪除重復項? ( 解決方案 )
  • 編寫一個Java程序,以查看兩個String是否是Anagram? ( 解決方案 )
  • 如何計算字符串中字符的出現次數? ( 解決方案 )
  • 如何從Java中的String查找第一個非重復字符? (有關解決方案,請參見此處 )
  • 編寫程序以檢查Java中的數字是否為二進制? ( 解決方案 )
  • 如何在不使用Collection API的情況下從數組中刪除重復項? ( 解決方案 )
  • 編寫一個程序來計算Java中數字的總和? ( 解決方案 )
  • 翻譯自: https://www.javacodegeeks.com/2014/05/how-to-find-prime-factors-of-integer-numbers-in-java-factorization.html

    總結

    以上是生活随笔為你收集整理的如何在Java中找到整数的质因数–因式分解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。