[Java] 纯文本查看 复制代码 /*
题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
*/
import java.util.Scanner;
//分解因数测试
class Demo_ResolveFactor{
public static void main(String[] args){
System.out.println("请输入一个正整数");
Scanner sc = new Scanner(System.in);
//获取正整数 n
int n = sc.nextInt();
//调用分解因数方法
ResolveFactor(n);
}
//质因数分解方法
private static void ResolveFactor(int n){
//定义一个字符串,初始化为 n= 用于拼接
String s = n+"=";
//定义第一个质因数
int k = 2;
//分解质因数
if(n < 0){
System.out.println("您输入的数据有误");
}else if( n == k || judge(n)){ //调用判断是否为质数的方法
//正整数本身是一个质数,就直接输出
System.out.print(s+n);
}else{
//循环遍历它的因子
while(k < n){
if(n % k == 0){
s += k+"*";
n /=k;
}else{
k++;
}
}
//输出所有分解的质因数
System.out.println("分解质因数如下:");
System.out.print(s+n);
}
}
//判断是否为质数的方法
private static boolean judge(int k){
boolean flag = false;
if(k == 0 || k == 1){
flag = false;
}else{
//如果k不是1,就从2开始到其平方根依次判断
for(int i = 2; i <= Math.sqrt(k);i++){
if(k % i == 0){
flag = false;
break;
}else{
flag = true;
}
}
}
return flag;
}
}
|