正数N的素因数分解Java实现

什么是素因数?

    素因数(质因数或质因子)在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算数基本定理,任何正整数皆有独一无二的质因子分解式。只有一个质因子的正整数为质数。

                                          --摘自百度百科

以一道题目作为学习参考:

Given a positive number n > 1 find the prime factor decomposition of n. The result will be a string with the following form (给定正数n> 1找到n的素因子分解。 结果将是一个以下形式的字符串)with the p(i) in increasing order and n(i) empty if n(i) is 1.(如果n(i)为1,则p(i)以递增的顺序排列,并且n(i)为空)

解决思路对n进行分解质因数操作,应该先找到最小的质数min,然后再进行操作,

(1)如果n=min,则分解过程结束

(2)如果n>min且n能被min整除,则保存min的值,然后取商赋给min,重复执行第一步

(3)如果n不能被min整除,则min+1,再返回第一步执行

代码实现如下:

package com.wars;

import java.util.ArrayList;

/**
 * @author Byp
 *
 */
public class Test {

	/*
	 * 分解质因数
	 */
	public static void factors(int n) {
		//定义最小素数
		int min = 2;
		ArrayList<Integer> x = new ArrayList<Integer>();
		//辗转相除
		while (min <= n) {
			//如果n能整除min说明min是n的一个因数,应该保留
			if (n % min == 0) {
				x.add(min);
				//将商重新赋值给n
				n = n / min;
				min = 2;
			} else {
				//无法整除,min自增
				min++;
			}
		}
		for (Integer integer : x) {
			System.out.print(integer+"  ");
		}
	}
	public static void main(String[] args) {
		factors(7775460);
	}
}

程序运行结果:

2  2  3  3  3  5  7  11  11  17  
以上为个人学习笔记,如有问题欢迎指正,如有不同解决方法也欢迎交流分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值