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

2025-03-14 02:03:3897 次浏览

最佳答案

import java.util.ArrayList;

import java.util.List;

import java.lang.Math;

public class Solution {

private int num;

private List 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();

primeList.add(3);

}

public List findPrimeContainedList(){

index=0;

int operationNum = num;

List list = new ArrayList();

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

声明:知趣百科所有作品均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请在页面底部查找“联系我们”的链接,并通过该渠道与我们取得联系以便进一步处理。