MOOC零基础学Java第七章
题目内容:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。
现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。
import java.util.Scanner;
public class Main {
public static boolean prime(int x) {//判断是否为质数(因子和原数,为质数时返回值为true)
boolean s = true;
for (int i = 2; i <= Math.sqrt(x); i++) {
if (x % i == 0) {
s = false;
break;
}
}
return s;
}
public static void fac(int y) {//计算因式分解式
for (int i = 2; i <= Math.sqrt(y); i++) {
if(prime(i)) {//判断i是否为质数
while(y % i == 0) {//判断质数i是否为y的质因数
System.out.print(i+"x");
y = y / i;//除以第一个质因数后计算后面的质因数
if (prime(y)) {//是否分解完全
System.out.print(y);
break;
}
}
}
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int x=in.nextInt();
System.out.print(x+"=");
if(prime(x)){//输入的数为质数
System.out.print(x);
}
else{//输入的数为合数
fac(x);
}
}
}
补充:
计算质因数的个数:
import java.util.Scanner;
public class Main2 {
public static boolean prime(int x) {//判断是否为质数(因子和原数,为质数时返回值为true)
boolean s = true;
for (int i = 2; i <= Math.sqrt(x); i++) {
if (x % i == 0) {
s = false;
break;
}
}
return s;
}
public static int num(int x) {
int j=0;
for (int i = 2; i <= Math.sqrt(x); i++) {
if(prime(i)) {//判断i是否为质数
while(x % i == 0) {//判断质数i是否为y的质因数
j += 1;
x = x / i;//除以第一个质因数后计算后面的质因数
if (prime(x)) {//是否分解完全
j += 1;
//System.out.print(" i="+x);
break;
}
}
}
}
return j;//质因数的个数
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
System.out.println(x+"的质因数的个数为:"+num(x));
}
}