P1036 选数

Posted tflsnoi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1036 选数相关的知识,希望对你有一定的参考价值。

https://www.luogu.com.cn/problem/P1036

 

方法二:二进制枚举+素数筛

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[25];
 4 const int max_n=10000005;
 5 int b[max_n];
 6 void su(){//素数筛 建立表供后面查 
 7     b[1]=1;
 8     int m=sqrt(max_n);
 9     for(int i=2; i<=m; i++)
10         if(!b[i])
11             for(int j=2; j<=max_n/i; j++)
12                 b[i*j]=1;
13 //    for(int i=2; i<100; i++)
14 //        if(!b[i])
15 //            cout<<i<<" ";
16 }
17 int main()
18 {
19     su();
20     int n, m, ans=0;
21     cin>>n>>m;
22     for(int i=0; i<n; i++)cin>>a[i];//输入
23     for(int i=0; i<(1<<n); i++){  
24         int sum=0;
25         int num=0, kk=i;//num统计i中1的个数;kk用来处理i
26         while(kk){
27             kk=kk&(kk-1);//清除kk中的最后一个1
28             num++;//统计1的个数
29         }
30         
31         if(num==m){//二进制数中的1有k个,符合条件
32             for(int j=0; j<n; j++)
33                 if(i&(1<<j))
34                     sum+=a[j];//cout<<a[j]<<" ";
35             
36             if(!b[sum])ans++;//判断sum是否为素数 
37         }
38     }
39     cout<<ans;
40     return 0;
41  }

以上方法看不懂的请参考笔者之前写过的一篇博客》》重写--全排列--全面理解搜索

以上是关于P1036 选数的主要内容,如果未能解决你的问题,请参考以下文章

洛谷—— P1036 选数 || Vijos——选数

P1036 选数

P1036 选数

洛谷 P1036 选数

P1036 选数

P1036 选数