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

如题所述

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了。逻辑很简单,做了点优化。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-07-11
题目:将一个正整数分解质因数。例如:输入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+"*");本回答被网友采纳
第2个回答  2015-10-11
题目:将一个正整数分解质因数。例如:输入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;
}
}
}
}本回答被网友采纳

java输入一个整数,输出其所有素数因子
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 = ...

编程,输入一个正整数,输出它的所有质数因子(如180的质数因子为2、2...
import java.util.*;public class Main{ public static void main(String[]args){ Scanner str=new Scanner(System.in);long num=str.nextLong();String result=getResult(num);System.out.println(result);} public static String getResult(long num){ int pum=2;String result="";while(num!=...

Java语言输出一个整数所有素数因子
这主要是考察对素数判定吧。class T { public static boolean isPrime(int n) { if (n<2) return false; if (n==2) return true; for (int i=3;i<=Math.sqrt(n);i++) { if (n%i==0) return false; } return true; } public static void main(String ar...

编写一个程序,输出3~100之间的全部素数?
3. 如果该数字不能被整除,则说明该数字为素数,输出该数字。注意:该程序中使用了 `else` 关键字,它表示当循环正常执行完毕时才会执行这个分支。在本程序中,当内部的 for 循环正常执行完毕(即未被 break 中断)时,就说明该数字是一个素数,所以可以输出该数字。

编写一个程序,求一个数的所有因子
\/\/如果sum可以被素数因子整除,直接分解商,后续的因子不必再循环 break;} } } \/\/如果可以被2整除,则+1,否则+1后再除以2 public int getMiddleAfter(int num){ if(num%2==0){ return num\/2+1;}else{ return (num+1)\/2;} } \/\/判断是否是素数 public boolean isSuShu(int num){ bo...

java:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程...
代码:public class Test {public static final void main(String[] args) {\/\/ 质数(prime number)又称素数\/\/ 对n进行分解质因数,应先找到一个最小的质数kSystem.out.println("该程序实现一个正整数分解质因子");System.out.println("请输入一个正整数:");Scanner scanner = new Scanner(...

用java写个程序 判断 用户输入的数 是否是质数?
使用java编写判断自然数是否为素数的方式是,使用scanner来接受用户输入的数值,使用素数的算法,实例如下:Scanner sr = new Scanner(System.in); System.out.print("请输入a的值:"); int a = sr.nextInt(); boolean is = true; if (a < 1) { System.out.println(a +...

java 输出101-200内的质数,我错在哪里
把continue换成break就ok了。还有第二层循环可以减小到j<(i\/2+1)的范围内。因为一旦i % j == 0成立了的话就不用再对这个数进行除法比较了,跳到下一个数就行了所以改成break,除法比较的时候比到自己的一半的书的话就可以确定是不是质数了所以循环的范围可以减小。

java输出400以内的smith数!请高手!
= j * j) isExist = true; if (b) { r = j % 100 \/ 10 + j % 100 % 10; \/\/ 取因子各位数字和 sum1 *= j; \/\/ 素数因子累乘和 sum += r; \/\/ 因子数位累加和 if (isExist) sum += r; } } } if (sum1 == i)\/\/ 输出满足的smith数 if (t == sum) System.out...

java 编程题集
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。【程序4】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印...

相似回答