码迷,mamicode.com
首页 > 其他好文 > 详细

P1036 选数

时间:2020-07-15 01:26:17      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:c++   ==   targe   pre   style   sum   bit   turn   logs   

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 选数

标签:c++   ==   targe   pre   style   sum   bit   turn   logs   

原文地址:https://www.cnblogs.com/tflsnoi/p/13303061.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!