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测试 。

素数分解算法的JUnit测试
这就是如何在Java中查找整数的素数。 如果您需要更多练习,还可以查看以下20个编程练习,涉及各种主题,例如LinkdList,String,Array,Logic和Concurrency。

  1. 如何在Java中不使用临时变量的情况下交换两个数字? ( 把戏 )
  2. 如何检查LinkedList是否包含Java循环? ( 解决方案 )
  3. 编写程序以检查数字是否为2的幂? ( 回答 )
  4. 如何通过一遍查找LinkedList的中间元素? (有关解决方案,请参见此处 )
  5. 如何检查数字是否为素数? ( 解决方案 )
  6. 编写程序来查找给定数字的斐波那契数列? ( 解决方案 )
  7. 如何检查号码是否是阿姆斯特朗号码? ( 解决方案 )
  8. 编写一个程序来防止Java死锁? (单击此处获取解决方案)
  9. 编写一个程序来解决Java中的Producer Consumer问题。 ( 解决方案 )
  10. 如何在不使用API​​方法的情况下反转Java中的String? ( 解决方案 )
  11. 编写程序来使用Java中的递归来计算阶乘? (单击此处获取解决方案)
  12. 如何检查一个数字是否是回文? ( 解决方案 )
  13. 如何检查数组是否包含重复的数字? ( 解决方案 )
  14. 如何从Java中的ArrayList中删除重复项? ( 解决方案 )
  15. 编写一个Java程序,以查看两个String是否是Anagram? ( 解决方案 )
  16. 如何计算字符串中字符的出现次数? ( 解决方案 )
  17. 如何从Java中的String查找第一个非重复字符? (有关解决方案,请参见此处 )
  18. 编写程序以检查Java中的数字是否为二进制? ( 解决方案 )
  19. 如何在不使用Collection API的情况下从数组中删除重复项? ( 解决方案 )
  20. 编写一个程序来计算Java中数字的总和? ( 解决方案 )

翻译自: https://www.javacodegeeks.com/2014/05/how-to-find-prime-factors-of-integer-numbers-in-java-factorization.html

java整数的因式分解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最新】解决Github网页上图片显示失败的问题

转载链接&#xff1a; https://blog.csdn.net/qq_38232598/article/details/91346392?utm_mediumdistribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_sourcedistribute.pc_relevant_t0.none-task-blog-BlogCommend…

串口服务器的通讯模式

串口服务器&#xff0c;一个为RS-232/485/422到PC/IP之间完成数据转换的具有强大功能的方便快捷的通讯接口转换器。串口服务器通过作为服务器端&#xff0c;提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输&#xff0c;提供串口转网络功能&#xff0c;RS-232/485/42…

JUnit 5和Selenium –使用Gradle,JUnit 5和Jupiter Selenium设置项目

Selenium是一组支持浏览器自动化的工具和库&#xff0c;主要用于Web应用程序测试。 Selenium的组件之一是Selenium WebDriver&#xff0c;它提供客户端库&#xff0c;JSON有线协议&#xff08;与浏览器驱动程序进行通信的协议&#xff09;和浏览器驱动程序。 Selenium WebDrive…

机器学习相关知识 大佬博客整理

一 马尔科夫链详细介绍 https://www.cnblogs.com/traditional/p/12612010.html

ns3gym与ns3ai的安装方法

编译运行的常用命令 1&#xff0c;针对ns3主项目的编译命令 分两步&#xff1a;第一&#xff0c;./waf configure&#xff1b;第二&#xff0c;./waf&#xff08;或者./waf build&#xff09; 详见《开源网络模拟器ns3》P13 2&#xff0c;针对多脚本同时运行的编译命令 ns3…

Ubuntu16.04安装WPS

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循<a href"http://creativecommons.org/licenses/by-sa/4.0/" target"_blank" rel"noopener"> CC 4.0 BY-SA </a>版权协议&#xff0c;转载请附上原文出处链接和本声明。 原文…

网络仿真中数据生成相关

1 流量激励生成 十分钟泊松分布 了解泊松分布与指数分布的关系

apache hadoop_通过Apache Hadoop大规模扩展Apache Solr实时实时索引

apache hadoop播客的第22集是与Patrick Hunt的谈话 我们讨论了Apache Solr&#xff08;上游&#xff09;中的新工作&#xff0c;使它可以在Apache Hadoop上工作。 Solr支持将其索引和事务日志文件写入和读取到HDFS分布式文件系统。 这不使用Hadoop Map-Reduce处理Solr数据&…

显示/隐藏我的电脑与回收站

Windows徽标键i”——打开——“Windows设置”——点击——“个性化”——进入——“主题”——下滑——“相关设置”——中的——“桌面图标设置”。把勾勾全去掉即可。

没有Javax的Jakarta EE:这次世界也不会结束

如果您错过了新闻&#xff0c; Oracle将向Eclipse基金会捐赠Java EE规范 。 这项决策在规范过程中经历了相当长时间的休眠&#xff0c;在此过程中&#xff0c;人们理所当然地怀疑Oracle对Java EE失去了战略兴趣。 起初&#xff0c;Java EE和更广泛的Java社区很好地满足了捐赠规…

NS3Gym python侧代码分析

argparse库参考链接: https://docs.python.org/zh-cn/3/howto/argparse.html

火狐浏览器常用操作

1 建立书签文件夹并在标签栏显示 https://zhidao.baidu.com/question/1510197150305270220.html

pat乙级 1007 素数对猜想(C++)

题目 让我们定义dn为&#xff1a;dn pn1 −pn &#xff0c;其中p​i​​ 是第i个素数。显然有d​1​​ 1&#xff0c;且对于n>1有d​n​​ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105 )&#xff0c;请计算不超过N的满足猜想…

如何在不增加人员的情况下自动化API安全程序

在这篇文章中&#xff0c;我们将撰写一篇综合文章&#xff0c;内容涉及如何在不增加人员的情况下自动执行API安全程序。 在现代世界中&#xff0c;数据对于提供者和消费者都至关重要。 数据科学的出现证明了这一事实。 对于某些组织&#xff0c;整个业务模型是建立在信息交换之…

python错误bug调试问题汇总

1 Python-出现“Non-ASCII character ‘\xe6‘ in file“错误解决方法 2 python中for循环语句使用 3 Python解决两个整数相除只得到整数部分问题 4 python2的print和python3的print()

pat 乙级 1001 害死人不偿命的(3n+1)猜想(C++)

题目 卡拉兹(Callatz)猜想&#xff1a; 对任何一个正整数 n&#xff0c;如果它是偶数&#xff0c;那么把它砍掉一半&#xff1b;如果它是奇数&#xff0c;那么把 (3n1) 砍掉一半。这样一直反复砍下去&#xff0c;最后一定在某一步得到 n1。卡拉兹在 1950 年的世界数学家大会上公…

C++编译的bug解决方法

1 编译错误 jump to case label [-fpermissive]

jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器

jpa 测试该帖子与 Aslak Knutsen &#xff08; aslakknutsen &#xff09;一起撰写。 JPA类型转换器为定义实体属性如何持久存储到数据库提供了一种简便的方法。 您可以使用它们来实现许多不同的功能&#xff0c;例如&#xff0c;如上一篇文章中所示&#xff1a;加密数据&…

pat 乙级 1002 写出这个数(C++)

题目 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入与输出 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10^​100​​ 。 输出格式&#xff1a; 在一行内输出…

详细介绍 安装ns3步骤

安装ns3步骤&#xff1a; 准备工作—— 1.[Linux] ubuntu系统安装完成 2.熟悉Linux常用命令 开始安装—— 确保ubuntu已经完成换源---阿里云或清华,个人推荐阿里云 3.安装组件和依赖库 1.快捷键CtrlAltT 打开终端&#xff0c;输入以下命令&#xff1a; sudo apt-get update …