分解质因数

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++;
}
}
}
}

以上是关于分解质因数的主要内容,如果未能解决你的问题,请参考以下文章

质因数分解

质因数分解(唯一分解定理)

C++实例 分解质因数

在分解质因数的时候,一般从啥的质因数考虑?

分解质因数

练习十四:分解质因数