n数乘积第m小

扫码查看

这是从Java贴吧看到的一道面试题,看了别人的解题思路实现的....

如题:

n个数,他们的乘积可得到一些其它的数,求第m小的。

输入格式:
n m
n1 n2 n3 ...

例:
输入:
3 8
2 3 5

输出:
10

如何得来:2, 3, 4(2*2), 5, 6(2*3), 8(2*2*2), 9(3*3), 10(2*5)

思路:
    不论它们怎么排列组合的乘积得到的数字都还能被这些数字约掉,
    所以只需要从最小的开始进行因式分解判断就可以了。

 public class Main {

     public static void main(String[] args) {

         Scanner sc=new Scanner(System.in);

         int n=sc.nextInt();
int m=sc.nextInt(); int a[]=new int[n];
for(int i=0;i<a.length;i++){
a[i]=sc.nextInt();
} Arrays.sort(a); long ans=a[0];
while(m>0){
if(factorSolve(ans,a)) m--;
ans++;
} System.out.println(--ans);
} public static boolean factorSolve(long n,int a[]){
if(n==1) return true;
for(int i=0;i<a.length;i++){
if(n%a[i]==0 && factorSolve(n/a[i],a)) return true;
}
return false;
}
}
04-10 03:02
查看更多