网站建设方面的书籍,中山网站推广,网站建设课设心得,赣州章贡区医保局电话java整数的因式分解编程课程中的常见家庭作业/任务之一是关于Prime Factorization。 要求您编写一个程序以找到给定整数的素因子 。 一个数字的素数因子是将精确地除以给定数字的所有素数。 例如#xff0c;素数因子35是7和5#xff0c;它们本身都是素数#xff0c;并且精确… 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]但以质数为单位的数字为[ 22233 ] 。 如果需要这种输出可以重写我们的primeFactorslong number方法以返回List Integer 如下所示 public static ListInteger primeFactors(long number) {ListInteger 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;} 这是使用此版本的primeFactorslong 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 ListInteger list(int... factors){ListInteger 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中我们有五个测试用例来测试拐角案例单个素因案例和多个素因案例。 我们还创建了一个实用程序方法listint…ints 该方法利用Java 5 varargs返回给定数字的List。 您可以使用任意数量的参数包括零来调用此方法在这种情况下它将返回一个空的List。 如果您愿意可以扩展我们的测试类以添加更多测试例如性能测试或一些特殊情况测试以测试我们的素因分解算法。 这是我们的JUnit测试的输出如果是您的新产品还可以查看本教程以了解如何创建和运行JUnit测试 。 这就是如何在Java中查找整数的素数。 如果您需要更多练习还可以查看以下20个编程练习涉及各种主题例如LinkdListStringArrayLogic和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.htmljava整数的因式分解