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 选数的主要内容,如果未能解决你的问题,请参考以下文章