F
1 // worfzyq
2 #include <cstdio>
3 #include <cstring>
4 #include <vector>
5 #include <algorithm>
6 #include <map>
7 #include <string>
8 #include <set>
9 using namespace std;
10 typedef long long LL;
11 const int MAX = 1e5+10;
12 const int MOD = 1e9+7;
13 int dp[110][1<<16],has[110];
14 int prime[15]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
15 int a[MAX];
16 void init() {
17 memset(has,0,sizeof(has));
18 for(int i=1;i<=100;i++) {
19 for(int j=0;j<15;j++) {
20 if(i%prime[j]==0) {
21 has[i]|=(1<<j);
22 }
23 }
24 }
25 }
26 int main() {
27 //freopen("in.txt","w",stdout);
28 init();
29 int n,x;
30 while(scanf("%d %d",&n,&x)==2) {
31 for(int i=0;i<n;i++) {
32 scanf("%d",&a[i]);
33 }
34 memset(dp,0,sizeof(dp));
35 for(int i=0;i<n;i++) {
36 for(int j=0;j<(1<<15);j++) {
37 dp[i+1][j]=max(dp[i+1][j],dp[i][j]);
38 if((j&has[a[i]])==0) {
39 dp[i+1][j|has[a[i]]]=max(dp[i+1][j|has[a[i]]],dp[i][j]+1);
40 }
41 }
42 }
43 int ans=0;
44 for(int i=0;i<(1<<15);i++) {
45 ans=max(ans,dp[n][i]);
46 }
47 if(n&1) {
48 if(ans>=n/2) {
49 if(x>=1) printf("YES\n");
50 else printf("NO\n");
51 }
52 else {
53 if(x>=n-ans*2) {
54 printf("YES\n");
55 }
56 else {
57 printf("NO\n");
58 }
59 }
60 }
61 else {
62 if(ans>=n/2) {
63 printf("YES\n");
64 }
65 else {
66 if(x>=n-ans*2) {
67 printf("YES\n");
68 }
69 else {
70 printf("NO\n");
71 }
72 }
73 }
74 }
75 return 0;
76 }
2 #include <cstdio>
3 #include <cstring>
4 #include <vector>
5 #include <algorithm>
6 #include <map>
7 #include <string>
8 #include <set>
9 using namespace std;
10 typedef long long LL;
11 const int MAX = 1e5+10;
12 const int MOD = 1e9+7;
13 int dp[110][1<<16],has[110];
14 int prime[15]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
15 int a[MAX];
16 void init() {
17 memset(has,0,sizeof(has));
18 for(int i=1;i<=100;i++) {
19 for(int j=0;j<15;j++) {
20 if(i%prime[j]==0) {
21 has[i]|=(1<<j);
22 }
23 }
24 }
25 }
26 int main() {
27 //freopen("in.txt","w",stdout);
28 init();
29 int n,x;
30 while(scanf("%d %d",&n,&x)==2) {
31 for(int i=0;i<n;i++) {
32 scanf("%d",&a[i]);
33 }
34 memset(dp,0,sizeof(dp));
35 for(int i=0;i<n;i++) {
36 for(int j=0;j<(1<<15);j++) {
37 dp[i+1][j]=max(dp[i+1][j],dp[i][j]);
38 if((j&has[a[i]])==0) {
39 dp[i+1][j|has[a[i]]]=max(dp[i+1][j|has[a[i]]],dp[i][j]+1);
40 }
41 }
42 }
43 int ans=0;
44 for(int i=0;i<(1<<15);i++) {
45 ans=max(ans,dp[n][i]);
46 }
47 if(n&1) {
48 if(ans>=n/2) {
49 if(x>=1) printf("YES\n");
50 else printf("NO\n");
51 }
52 else {
53 if(x>=n-ans*2) {
54 printf("YES\n");
55 }
56 else {
57 printf("NO\n");
58 }
59 }
60 }
61 else {
62 if(ans>=n/2) {
63 printf("YES\n");
64 }
65 else {
66 if(x>=n-ans*2) {
67 printf("YES\n");
68 }
69 else {
70 printf("NO\n");
71 }
72 }
73 }
74 }
75 return 0;
76 }