java 将一个正整数分解质因数(java50道经典编程题)

↘锁芯ラ 提交于 2019-12-27 01:33:47

题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
首先我们要对这个问题进行分析:
如果我们要对n分解质因数。应该先找到一个最小的质数k,而后按照下述步骤进行
1)如果这个质数恰好等于n,则说明分解质因数的过程已经结束,打印出即可;
2)但是如果n不等于k,但是n能被k整除,则应该打印出k的值,并且用n除以k的商,作为新的正整数n。重复执行第一步。
3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

我们还必须要明白质数的概念,作为质数,0和1不是质数。

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。
话不多说直接上代码:

import java.util.Scanner;

//分解质因数
public class Prime_factor {
	//n代表需要输入的正整数
    static int n,k = 2;

    public static void main(String[] args) {
        System.out.print("请输入一个大于2的正整数:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.print(n+"=" );
        while(n!=k) {
        	if(n%k == 0) {
        		n = n/k;
        		System.out.print(k+"*");
        	}
        	else {
        		k++;
			}
        }
        System.out.print(n);
    }
}

结果如下
结果
老规矩我们再来看一波大神代码:

public static void no4(int num) {
		for(int i = 2;i <= num;) {
			if(num % i == 0) {
				num /= i;
				if(i <= num) {
					System.out.print(i+"*");
				} else {
					System.out.print(i);
				}
			} else {
				i++;
			}
		}
	}

当然了大神的代码省略了输入以及开始的一些包含关系等。
我们再来看大神代码的递归版

/**
	 * 递归  自己调用自己   一定要记得什么时候结束
	 * @param num
	 * @param k
	 */
	public static void no4(int num,int k) {
		if(k <= num) {
			if(num % k == 0) {
				System.out.print(k+"*");
				no4(num / k, k);
			}else {
				no4(num,++k);
			}
		}
	}

这里就是一个简单的递归,作为递归一定要记得有结束条件。而且我在上大二大三的时候我忘了,好像有一个大佬曾经告诉过我尽量避免使用递归。不过不管怎么说一个东西被发明出来肯定有它的价值。所以作为学习还是建议大家了解一下。如果你不懂你就把它写下来,盯着代码看。亦或是往中间加入一条输出语句分析一下执行过程你就明白了。后续我还会发一些调试程序的博客,不过最近比较忙,要学习java还要做毕设。唉,苦呀。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!