题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
详细描述:
函数接口说明:
public String getResult(long ulDataInput)
输入参数:
long ulDataInput:输入的正整数
返回值:
String
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开
输入例子:
180
输出例子:
2 2 3 3 5
方法一:常规
import java.util.Scanner;
public class Main{public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
long input = scan.nextLong();
printDivisor(input);
}
scan.close();
}
private static void printDivisor(long input){
StringBuilder sb = new StringBuilder();
while(input != 1){
//如果Input本身就是质数,则直接添加
if(isPrime(input)){
sb.append(input).append(" ");
break;
}
for(long i = 2 ; i <= Math.sqrt(input) ; i++){
if(isPrime(i) && input % i == 0){
sb.append(i).append(" ");
input /= i;
break;
}
}
}
System.out.println(sb.toString());
}
/**判断是否为质数*/
private static boolean isPrime(long input){
if(input < 2) return false;
for(int i = 2 ; i <= Math.sqrt(input) ; i++){
if(input % i == 0) return false;
}
return true;
}
}
方法二:简便
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
long input = scan.nextLong();
printDivisor(input);
}
scan.close();
}
private static void printDivisor(long input){
StringBuilder sb = new StringBuilder();
int dirt = 2;
while(input != 1){
while(input % dirt == 0){
sb.append(dirt).append(" ");
input /= dirt;
}
dirt++;
}
System.out.println(sb.toString());
}
}