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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java整数的因式分解_如何在Java中找到整数的质数-因式分解

發(fā)布時間:2023/12/3 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java整数的因式分解_如何在Java中找到整数的质数-因式分解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java整數(shù)的因式分解

編程課程中的常見家庭作業(yè)/任務(wù)之一是關(guān)于Prime Factorization。 要求您編寫一個程序以找到給定整數(shù)的素因子 。 一個數(shù)字的素數(shù)因子是將精確地除以給定數(shù)字的所有素數(shù)。 例如,素數(shù)因子35是7和5,它們本身都是素數(shù),并且精確地除以35。上一次我上大學(xué)時做此練習(xí),就像是編寫一個要求用戶輸入整數(shù)的程序然后在命令行中顯示該數(shù)字的素數(shù)分解。 該程序也有變種,例如,看一下本練習(xí),編寫一個程序以提示用戶輸入正整數(shù),并以降序顯示所有最小因子。 它與前面提到的素因數(shù)分解問題大致相同,但是有一些以降序顯示的問題。 顯示根本不是問題,您可以在命令提示符或GUI中輕松顯示它,主要是編寫邏輯來找到主要因素,這就是您將在本編程教程中學(xué)到的。 請記住,我們不能使用直接解決問題的API方法,例如,不允許您使用StringBuffer的反向方法來反向Java中的String。 您需要通過使用原始編程結(jié)構(gòu)(例如控制語句,循環(huán),算術(shù)運算符等)來編寫素數(shù)分解的核心邏輯。

在這里不拖延地介紹了我們找到主要因素的完整Java程序。 計算素數(shù)的邏輯寫在方法primeFactors(長整數(shù))內(nèi)部,這是查找素數(shù)的簡單蠻力邏輯。 我們從2開始,因為那是第一個質(zhì)數(shù),并且每個數(shù)字也可以被1整除,然后我們進(jìn)行迭代,直到通過一次遞增和步進(jìn)來找到質(zhì)數(shù)。 當(dāng)我們找到一個素數(shù)因子時,我們將其存儲在Set中,并減少數(shù)量直至循環(huán)。 為了運行該程序,您可以簡單地將其復(fù)制粘貼到文件PrimeFactors.java中,然后使用javac和java命令進(jìn)行編譯和運行。 如果您發(fā)現(xiàn)運行此程序有任何困難,還可以參考本文以獲取有關(guān)如何從命令提示符下運行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中引入了它的菱形運算符可以更好地進(jìn)行類型推斷。 現(xiàn)在,您無需在表達(dá)式的兩面編寫類型參數(shù),就像在Java 1.6中一樣,這使它們更具可讀性。 現(xiàn)在回到練習(xí),如果您查看輸出,它僅返回唯一的質(zhì)因數(shù),因為我們正在使用Set接口,該接口不允許重復(fù)。 如果Interviewer要求您編寫程序?qū)?shù)字除以其主要因子,然后打印所有因子,則需要使用List界面而不是Set。 例如, '72 '的唯一質(zhì)數(shù)為[2,3],但以質(zhì)數(shù)為單位的數(shù)字為[ 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界面之間的區(qū)別 ,這對初學(xué)者來說非常重要。

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]

現(xiàn)在,是時候練習(xí)編寫一些JUnit測試了。 實際上,有兩種測試代碼的方法,一種是通過編寫main方法,調(diào)用方法并將自己的實際輸出與預(yù)期輸出進(jìn)行比較。 其他更高級和首選的方法是使用單元測試框架(如JUnit)來實現(xiàn)。 如果您遵循測試驅(qū)動的開發(fā),那么甚至可以在編寫代碼之前編寫測試,然后讓測試驅(qū)動您的設(shè)計和編碼。 讓我們看看我們的程序在一些JUnit測試中的表現(xiàn)如何。

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中,我們有五個測試用例來測試拐角案例,單個素因案例和多個素因案例。 我們還創(chuàng)建了一個實用程序方法list(int…ints) ,該方法利用Java 5 varargs返回給定數(shù)字的List。 您可以使用任意數(shù)量的參數(shù)(包括零)來調(diào)用此方法,在這種情況下,它將返回一個空的List。 如果您愿意,可以擴展我們的測試類以添加更多測試,例如性能測試,或一些特殊情況測試以測試我們的素因分解算法。

這是我們的JUnit測試的輸出,如果是您的新產(chǎn)品,還可以查看本教程,以了解如何創(chuàng)建和運行JUnit測試 。


這就是如何在Java中查找整數(shù)的素數(shù)。 如果您需要更多練習(xí),還可以查看以下20個編程練習(xí),涉及各種主題,例如LinkdList,String,Array,Logic和Concurrency。

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

    java整數(shù)的因式分解

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。