分解质因数
Posted 读你一世
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分解质因数相关的知识,希望对你有一定的参考价值。
题目内容:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。
现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。
输入格式:
一个整数,范围在[2,100000]内。
输出格式:
形如:
n=axbxcxd
或
n=n
所有的符号之间都没有空格,x是小写字母x。
输入样例:
18
输出样例:
18=2x3x3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;// 计数器
int n = 0;// 输入
int nBeifen;// 备份n
int prime = 2;// 素数,第一个素数是2
n = sc.nextInt();
if (prime(n)) {
System.out.printf("%d=%d\n", n, n);// n=n
} else {
System.out.printf("%d=", n);// n=axbxcxd
nBeifen = n;
while (nBeifen > 1) {
if (nBeifen % prime == 0) {
if (count > 0) {
System.out.printf("x");
}
nBeifen = nBeifen / prime;
System.out.printf("%d", prime);
count++;
} else {
prime++;
prime = nextPrime(prime);// 下一个素数
}
}
System.out.printf("\n");
}
}
public static boolean prime(int n) {// 判断是否素数
boolean isPrime = true;// 默认是素数
if (n == 1 || (n % 2 == 0 && n != 2)) {// 判断1或者除了2的偶数
isPrime = false;
} else if (n == 2) {// 判断2
isPrime = true;
} else {// 判断其他
for (int i = 3; i < Math.sqrt(n); i += 2) {
if (n % i == 0) {
isPrime = false;
break;
}
}
}
return isPrime;
}
public static int nextPrime(int n) {// 下一个素数
while (true) {
if (prime(n)) {
return n;
} else {
n++;
}
}
}
}
以上是关于分解质因数的主要内容,如果未能解决你的问题,请参考以下文章