题意:给你一个由n(1-100)素数组成的集合,问你第m(1-100000)大个所有质因子都来自于这个集合的合数是多少。。

解题思路:两种思路:1)bfs + 优先队列。   2) 直接枚举(已知第k大,找k+1大的数只需要找 质数乘前k个数的最小值,这里不用每次都乘,只需要维持一个 每个质数的现在乘到多少的数组即可)

解题代码:

 1 // File Name: humble.c
 2 // Author: darkdream
 3 // Created Time: 2014年01月14日 星期二 15时51分00秒
 4 /*
 5 ID: dream.y1
 6 PROG: humble
 7 LANG: C++
 8 */
 9 #include<stdio.h>
10 #include<string.h>
11 #include<stdlib.h>
12 #include<time.h>
13 #include<math.h>
14 long long  num[100005];
15 int hs[104];
16 int a[104];
17 int main(){ 
18    freopen("humble.in","r",stdin);
19    freopen("humble.out","w",stdout);
20   int n ,m; 
21   scanf("%d %d",&n,&m);
22   for(int i =1;i <= n;i ++)
23       scanf("%d",&a[i]);
24   num[0] = 1; 
25   for(int i =1;i <= m;i ++)
26   {
27       long long min = num[i-1] * a[1];
28       for(int j =1; j <= n;j ++)
29       {
30 
31         while(1ll* a[j] * num[hs[j]] <= 1ll*num[i-1])
32         {
33             hs[j] = hs[j] + 1;
34         }
35         if(a[j] * num[hs[j]] <= min )
36             min = a[j] * num[hs[j]];
37       }
38       num[i] = min;
39   }
40   printf("%lld\n",num[m]);
41   return 0 ;
42 }
View Code

 

posted on 2014-01-14 17:47  dark_dream  阅读(293)  评论(0编辑  收藏  举报