一开始拿到这道题,我是不太理解的,我想的是质因数的个数应该满足两个条件:1是质数2是它的因数;
可是这道题竟然允许重复计算,最后质因数相乘的积还得等于该数,我就有点纳闷。
后来才意识到是这个意思
比如120
它的最小质数是2,120=2×60
而60的最小质因数也是2, 60=2×30
30的最小质因数也是2,30=2×15
15的最小质因数是15
所以就得到了题目中的那个式子120=2×2×2×15
第一遍,我测试没毛病的代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
while(true) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int times=0;
while(iszhishu(n)!=-1)
{
times++;
int f=iszhishu(n);
n=n/f;
}
System.out.println(times+1);
}
}
private static int iszhishu(int n) {
// TODO Auto-generated method stub
int t=(int) Math.sqrt(n);
for(int i=2;i<=t;i++)
{
if(n%i==0)
return i;
}
return -1;
}
}
然而
哭了…… 我疑心是不该加while(true)的循环语句
于是做了更改
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int times=0;
while(iszhishu(n)!=-1)
{
times++;
int f=iszhishu(n);
n=n/f;
}
System.out.println(times+1);
}
private static int iszhishu(int n) {
// TODO Auto-generated method stub
int t=(int) Math.sqrt(n);
for(int i=2;i<=t;i++)
{
if(n%i==0)
return i;
}
return -1;
}
}
我试着只把第一遍通过的代码的while(true)语句去掉,也顺利AC了
但相比知晓,运行时间慢了很多。
我想我逐渐能理解为啥那么多AC榜第一的解法都用bufferedreader了