您的位置:首页 > 其它

华为OJ 初级:质数因子

2016-07-08 21:02 423 查看
描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )  详细描述:
函数接口说明:    public String getResult(long ulDataInput)输入参数:         long ulDataInput:输入的正整数返回值:        String  
知识点排序
运行时间限制10M
内存限制128
输入输入一个long型整数
输出按照从小到大的顺序输出它的所有质数的因子,以空格隔开
样例输入180
样例输出2 2 3 3 5
/*本题采用了两种方法
* 方法1:循环判断
* 方法2:使用递归
* */
import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long input = scanner.nextLong();
method_1(input);
System.out.println();
method_2(input);
scanner.close();
}

static void method_1(long input) {
long temp = input;
StringBuffer stringBuffer = new StringBuffer();
for (int i = 2; i <= input; i++) {
if (temp % i == 0) { //当可以整除,则说明是质数因子
temp = temp / i; //除掉当前判断出的质数因子
stringBuffer.append(i); //将质数因子存在stringbuffer中
i = 1;    //由于每次要从i=2开始判断,所以这里当取到一个质数因子后,要跳出循环,令i=1,i++后则为2
continue;
}
}
for (int i = 0; i < stringBuffer.length(); i++) {
if (i != stringBuffer.length() - 1)
System.out.print(stringBuffer.charAt(i) + " ");
else
System.out.print(stringBuffer.charAt(i));
}
}

static long method_2(long input) {
for (int i = 2; i <= input; i++) {
if (input % i == 0) {
System.out.print(i + " ");
return method_2(input / i); //使用递归,每次返回除掉质数因子后的值
}
}
return 0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: