java输入一个整数,输出其所有素数因子
答案:3 悬赏:40 手机版
解决时间 2021-03-24 12:15
- 提问者网友:战皆罪
- 2021-03-23 21:57
java输入一个整数,输出其所有素数因子
最佳答案
- 五星知识达人网友:山有枢
- 2021-03-23 23:17
题目:将一个正整数分解质因数。例如:输入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 while(n%i==0 && n!=i){
n/=i;
System.out.print(i+"*");
程序分析:对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/=i;
System.out.print(i+"*");
全部回答
- 1楼网友:猎心人
- 2021-03-24 00:03
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了。逻辑很简单,做了点优化。
import java.util.List;
import java.lang.Math;
public class Solution {
private int num;
private List
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
index=0;
int operationNum = num;
List
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
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了。逻辑很简单,做了点优化。
- 2楼网友:十年萤火照君眠
- 2021-03-23 23:44
题目:将一个正整数分解质因数。例如:输入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 while(n%i==0 && n!=i){
n/=i;
System.out.print(i+"*");
}
if(n==i){
System.out.println(i);
break;
}
}
}
}
程序分析:对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/=i;
System.out.print(i+"*");
}
if(n==i){
System.out.println(i);
break;
}
}
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯