すべての50個の基本的な算術の質問を見る、以下を参照してください。
50個の質問のJavaの基本的なアルゴリズム
素数が正確にn個に等しい場合(1)、次いで、素因数分解プロセスが完了した、それはプリントアウトすることができます。
(2)もしN <> K、Nが、kはkの値を印刷する必要が分割することができ、kは新しい正の整数nは、最初のステップが繰り返し実行されるように、使用nで分割されています。
nはkで割り切れない場合(3)において、k + 1はkの値として使用され、最初のステップが繰り返し実行されます。
package Demo04Prime_Factorization;
import java.util.ArrayList;
import java.util.Scanner;
public class Prime_Factorization {
/**
* 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
* (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
* (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
* (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*/
/*
分析(小学知识复习):
质数的概念:指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,也就是除了1和它自身,不能被其他数整除。
合数的概念:与质数正好相反,就是除了1和它自身以外,还可以被别的数整除。最小的合数是4。
最小的质数是2,所以分解一个合数的质因数,则从2开始试除,如果余数为0,则2就是质因数之一,把2记录下来,把商作为一个合数继续
分解,如果余数不为零,则应该加一,也就是试除3,如果余数为0,则3又是质因数之一,记录,把商又作为一个合数来分解,依次类推……
*/
public static void main(String[] args) {
System.out.println("请输入你要分解的合数: ");
// Scanner类获取用户输入的一个合数
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.println("分解结果===========================");
// 定义一个集合来接收Prime_Factors()方法返回的list集合
ArrayList<Long> list = Prime_Factors(num);
// 打印该合数的所有质因数
System.out.println("该合数的质因数集合为:");
System.out.println(list);
// 遍历所有的质因数集合,就乘积,验证通过方法调用得到的分解质因数结果对不对,可以不写
long pro=1;
for (int i = 0; i < list.size(); i++) {
pro=list.get(i)*pro;
// 格式化打印结果
if(i==0){
System.out.print(list.get(i));
}else if(i==list.size()-1){
System.out.println("*"+list.get(i)+"="+num);;
}else{
System.out.print("*"+list.get(i));
}
}
System.out.println("----------------------------------");
// 输出判断结果
if(pro==num){
System.out.println("本次分解质因数结果已经经过验证,结果正确!");
}
}
/**
* 将用户输入的合数传递给方法,最后返回一个含有该数所有质因数的集合。
* @param num
* @return
*/
public static ArrayList<Long> Prime_Factors(long num){
// 定义一个集合来盛这些质因数
ArrayList<Long> list = new ArrayList<>();
// 定义一个变量装商值
long n = num;
// 定义质因数变量,从2开始
long k = 2;
// 开始循环,遍历2~n的所有数,注意这个n是时刻变化的
while(k<=n){
// 如果这个质因数就等于这个数,说明该数是一个质数,直接记录并退出循环
if(k==n){
list.add(n);
break;
}
// 如果n可以被k整除,则k是n的质因数,记录这个质因数,并且把商值重新赋给n,k回到原点,重新开始
if(n%k==0){
list.add(k);
n=n/k;
k=2;
// 如果n不能被k整除,则k不是n的质因数,k+1,再去除
}else{
k++;
}
}
// 返回这个数的质因数集合
return list;
}
}