此题出自牛客网的华为机试在线训练专题
题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
最后一个数后面也要有空格
详细描述:
函数接口说明:
public String getResult(long ulDataInput)
输入参数:
long ulDataInput:输入的正整数
返回值:
String
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1
输入
180
输出
2 2 3 3 5
题解如下
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
long ulDataInput = sc.nextLong();
if(ulDataInput<2){
sc.close();
return;
}
String str = getResult(ulDataInput);
System.out.println(str);
}
sc.close();
}
public static String getResult(long ulDataInput){
StringBuilder sb = new StringBuilder();
while(ulDataInput != 1){
for(int i=2;i<=ulDataInput;i++){
if(ulDataInput%i==0){
sb.append(i);
sb.append(" ");
ulDataInput /= i;
break;
}
}
}
return sb.toString();
}
}
知识点总结:
初等数学基本定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且这种分解是唯一的。
由该定理所以我们在本题中不用去考虑因子是否为质数,因为这段代码从2开始遍历因子,倘若遍历到一个合数因子,但因为此时的合数因子肯定是不符合条件的(因为每一个合数的因子肯定都是比他它小的质数的积,既然在它前面的质数因子已经不满足取余为0这个条件了,那么它本身也肯定是不符合条件的)。
在Java中,静态方法只能直接调用静态方法,而不能直接调用非静态方法