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,一经查实,立即删除!

相关文章

串口服务器的通讯模式

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

ns3gym与ns3ai的安装方法

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

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设置”——点击——“个性化”——进入——“主题”——下滑——“相关设置”——中的——“桌面图标设置”。把勾勾全去掉即可。

在硒中查找具有链接文本和部分链接文本的元素

Selenium中CSS定位器是一个基本概念&#xff0c;每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点。 在Selenium中充分使用CSS定位器可以帮助您以更高效&#xff0c;更彻底的方式执行测试。 我从7年以来一直从事自动化测试行业&#xff0c;并且我经常观察到测试…

java8 函数式编程_您必须学习Java 8的函数式编程吗?

java8 函数式编程我最近一直在研究Java 8&#xff0c;并掌握了Manning出版的“ Java 8 In Action” 。 让我印象深刻的第一件事是Java 8独特的销售主张是函数式编程。 函数现在是一流的变量&#xff0c;您可以像int或String一样在代码中传递它们。 这是一个很大的变化。 近年来…

Dell笔记本双系统安装(Ubuntu 16.04)

一 参考博客 重点 以上博客在分盘问题中描写不详细&#xff0c;参考右边博客&#xff1a; 有关分盘问题 注意&#xff1a;其中&#xff0c;由于Bios Dell与其余电脑存在区别&#xff0c; 1. 开机按F12&#xff0c;进入BIOS 2.在 BIOS 的Boot菜单下&#xff0c;将Secure Bo…

pat 乙级 1006 换个格式输出整数(C++)

题目 让我们用字母 B 来表示“百”、字母 S 表示“十”&#xff0c;用 12…n 来表示不为零的个位数字 n&#xff08;<10&#xff09;&#xff0c;换个格式来输出任一个不超过 3位的正整数。 例如 234 应该被输出为 BBSSS1234&#xff0c;因为它有 2 个“百”、3 个“十”、以…

Selenium Java教程– Selenium中的类名定位器

Selenium中CSS Locator是编写脚本的最重要方面之一。 如果您无法通过使用Selenium中的任何CSS定位器来定位元素&#xff0c;那么精通Selenium自动化将是一项艰巨的任务。 硒提供多种定位元素的方法。 您可以查看有关Selenium中不同CSS定位器的其他文章&#xff0c;这些文章可通…

C++ floor、ceil、round函数的区别

函数解释 floor函数&#xff0c;向下取整。即向负无穷方向取离传入参数最近的整数ceil函数&#xff0c;向上取整。即向正无穷方向取离传入参数最近的整数round函数&#xff0c;四舍五入。 头文件 C语言&#xff1a;math.hC: cmath 函数原型 double floor(double)double ce…

C++ 函数参数3种传值方式(以交换两个数为例)

简介 在C中&#xff0c;函数参数的传值方式有传值调用、指针调用和引用调用。接下来&#xff0c;通过一个实例来演示三者区别。 代码 #include <iostream>using namespace std; //传值调用 void Swap(int a,int b) {int tempa;ab;btemp; } //指针调用 void Swap2(int…

Ubuntu系统中利用Sublime分别运行Python与Python3

背景 两台Ubuntu系统的电脑均使用Sublime&#xff0c;运行相同的代码&#xff0c;出现不同的效果。 经观察&#xff0c;一个Sublime python F5 编译采用的为python3&#xff0c;另一个采用的为python2&#xff08;通过两个版本的print函数不同观察&#xff0c;一个print&…

AWS Lambda事件源映射:使您的触发器混乱无序

最近&#xff0c;我们为Sigma Cloud IDE上的无服务器项目引入了两个新的AWS Lambda事件源&#xff08;触发类型&#xff09;&#xff1a; SQS队列和DynamoDB流 。 &#xff08;是的&#xff0c;AWS在几个月前就向他们介绍了&#xff1b;但是我们仍然是一个很小的团队&#xff0…

java 并发计数器_Java 8 LongAdders:管理并发计数器的正确方法

java 并发计数器我只是买了新玩具&#xff0c;而Java 8有很多 。 这次我想谈谈我的最爱之一-并发加法器。 这是一组新的类&#xff0c;用于管理由多个线程编写和读取的计数器。 新的API有望显着提高性能&#xff0c;同时仍使事情简单明了。 自从多核体系结构问世以来人们一直在…

数独 -- 合法数独与完全数独

一、数独的介绍 从2004年底开始&#xff0c;数独游戏在英国变得非常流行。数独(Sudoku)是一个日语单词意思是数字位置之类的单词(或短语)。谜题的理念非常简单;面对一个9 9的网格&#xff0c;被分成9个3 3的块: 在其中的一些盒子里&#xff0c;设置者放一些数字1-9:求解者的目…

程序包无效:“CRX_HEADER_INVALID“

版权声明&#xff1a;本文为博主转载文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 转载本文链接&#xff1a;https://blog.csdn.net/qq_41973208/article/details/89431020 之前在安装谷歌插件的时候遇到的问题&#xff0c;解决…

pat 乙级 1027 打印沙漏(C++)

题目 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递减到1&#x…

chrome 占用大量内存直到网页崩溃_Chrome吃内存太夸张!几招解决Chrome占内存硬伤...

我们知道Chrome是非常出色的浏览器&#xff0c;无论从性能还是功能的角度来看&#xff0c;都是如此。但是Chrome在内存占用方面的表现&#xff0c;就很令人头疼了&#xff01;常常听到有朋友抱怨&#xff0c;想要上网找找素材&#xff0c;不一会儿发现Chrome已经将PS要用的内存…

windows和ubuntu双系统设置开机默认系统

1、记住grub界面中windows的位置 我的界面如下&#xff1a;windows在第3行 2、选择进入ubuntu系统 3、打开终端&#xff0c;输入如下命令 sudo vim /etc/default/grub 4、看到如下图的内容 GRUB_DEFAULT是开机启动的默认项&#xff08;我的windows是第3行&#xff0c;所以此…

jenkins jboss_与JBoss Fuse,Jenkins和Nexus的持续集成

jenkins jboss最近&#xff0c;我正在整理一个快速启动的Maven项目&#xff0c;以展示组织JBoss Fuse项目的可能方法。 该项目可以在Github上找到&#xff1a; https : //github.com/paoloantinori/fuse_ci 这是我与朋友詹姆斯罗林斯 &#xff08; James Rawlings&#xff09…