描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围: 1≤n≤2×1000000000+14 (9个0)
输入描述:
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例1
输入:
180
输出:
2 2 3 3 5
通过全部用例
运行时间15ms
占用内存9668KB
String str = br.readLine();
Long start = System.currentTimeMillis();
int num = Integer.parseInt(str);
if (num <= 1 || num > 2000000014) {
return;
}
//一个从2开始的数,每循环一次+1
for (int n = 2; n <= num;n++) {
//当n大于当前num的平方根时,表示当前num为质数,直接输出并退出循环
if (n>(int) Math.sqrt(num)){
System.out.println(num);
break;
}
//当n为偶数时一定不为质数,开始下一次循环
if(n%2==0&&n>3){
continue;
}
//如果num可以整除n,需要判断n是否为质数
if(num%n==0){
// //获取n的平方根
int sqrt = (int) Math.sqrt(n);
//从2开始遍历
int i = 2;
for (; i <= sqrt; i++) {
//如果遍历的过程中发现n不是质数,则退出本次循环
if ((n % i) == 0) {
break;
}
}
//如果是break跳出的循环,i<=sqrt,如果i>sqrt,表明n是一个质数
if(i>sqrt){
//循环执行
while (num%n==0){
num=num/n;
System.out.print(n+" ");
}
}
}
}