这是从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;
}
}