什么是素因数?
素因数(质因数或质因子)在数论里是指能整除给定正整数的质数。除了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
以上为个人学习笔记,如有问题欢迎指正,如有不同解决方法也欢迎交流分享。