java输入一个整数,输出其所有素数因子

 我来答
slords
2017-07-10 · TA获得超过4932个赞
知道大有可为答主
回答量:3130
采纳率:56%
帮助的人:1853万
展开全部
import java.util.ArrayList;
import java.util.List;
import java.lang.Math;

public class Solution {
private int num;
private List<Integer> primeList;
private int index;

public int getNum() {
return num;
}

public void setNum(int 基闹宴num) {
this.num = num;
}

public Solution(int num) {
this.num = num;
primeList = new ArrayList<Integer>();
primeList.add(3);
}

public 搏银List<Integer> findPrimeContainedList(){
index=0;
int operationNum = num;
List<Integer> list = new ArrayList<Integer>();
int stop = (int) Math.floor(Math.sqrt(operationNum));
if(stop <= 弯团2){
return list;
}
operationNum = checkAndRemovePrimeNumber(operationNum,2,list);
stop = (int) Math.floor(Math.sqrt(operationNum));
int p = getNextPrimeNumber();
while(p <= stop){
operationNum = checkAndRemovePrimeNumber(operationNum,p,list);
stop = (int) Math.floor(Math.sqrt(operationNum));
p = getNextPrimeNumber();
}
list.add(operationNum);
return list;
}

private int checkAndRemovePrimeNumber(int num,int p,List<Integer> resultList){
boolean f = false;
while(num%p == 0){
num/=p;
f = true;
}
if(f){
resultList.add(p);
}
return num;
}

private int getNextPrimeNumber() {
if(this.primeList.size()>index++){
return this.primeList.get(index-1);
}
int next = this.primeList.get(this.primeList.size()-1) + 2;
while(true){
int stop = (int) Math.floor(Math.sqrt(next));
boolean f = true;
for(int n: this.primeList){
if(n > stop){
break;
}
if(next%n==0){
f = false;
break;
}
}
if(f){
this.primeList.add(next);
break;
}else{
next += 2;
}
}
return next;

}

public static void main(String[] args) {
Solution s = new Solution(123);
System.out.println(s.findPrimeContainedList());
s.setNum(240);
System.out.println(s.findPrimeContainedList());
}

}

好久没写JAVA了。逻辑很简单,做了点优化。

文逸UG
推荐于2017-07-11 · TA获得超过2313个赞
知道小有建树答主
回答量:1329
采纳率:0%
帮助的人:85.6万
展开全部
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为早丛新的正整数n,重复执行第一步。
(3)如果n不能被陆历樱k整除,则用k+1作为k的值,重复执行第一步。

public class Prog4{
public static void main(String[] args){
int n = 13;
decompose(n);
}
private static void decompose(int n){
System.out.print(n+"烂迅=");
for(int i=2;i<n+1;i++){
while(n%i==0 && n!=i){
n/=i;
System.out.print(i+"*");
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
西红柿系番茄
2015-10-11 · TA获得超过194个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:102万
展开全部
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因裂隐数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商型掘,作为新的正整数n,重卜源核复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

public class Prog4{
public static void main(String[] args){
int n = 13;
decompose(n);
}
private static void decompose(int n){
System.out.print(n+"=");
for(int i=2;i<n+1;i++){
while(n%i==0 && n!=i){
n/=i;
System.out.print(i+"*");
}
if(n==i){
System.out.println(i);
break;
}
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式