2 条题解

  • 3
    @ 2022-7-24 12:06:10
    #include <iostream>
    using namespace std;
    int a[30] , n , k , ans , maxx;
    bool un_prime[200000005] ;
    void dfs(int step, int num , int x){
        //深搜,step是的第step个数,num是和,x是找了几个数
    	if(step == n){//若到了n则每个数都找过了
    		if((!un_prime[num]) and x == k)//是不是质数
    			ans ++ ;
    	}
    	else if (x <= k){//若x > k 则不用找了
    		dfs(step+1,num+a[step], x + 1);//两种情况
    		dfs(step+1,num,x) ;
    	}
    	
    }
    int main(){
    	cin >> n >> k ;
    	for(int i = 0 ; i < n ; i ++){
    		cin >> a[i] ;
    		maxx += a[i];//最大会是几
    	}
    	un_prime[0] = un_prime[1] = 1 ;//埃氏筛法(这题貌似暴力寻找质数更快)
    	for(int i = 2 ; i <= maxx ; i ++)
    		if(!un_prime[i])
    			for(int j = i * 2 ; j <= maxx ; j += i)
    				un_prime[j] = true ;
    	dfs(0,0,0);
    	cout << ans ;
    	return 0 ;
    }
    
    • 1
      @ 2024-2-27 20:51:49
      #include <cstdio>
      #include <cmath>
      
      int n, k, cnt = 0, x[21];
      
      bool isPrime(int num) {
          if (num <= 1) return false;
          int sqr = (int)sqrt(1.0 * num);
          //如果num没有接近int型变量的范围上界,可以写i*i<=num
          for (int i = 2; i <= sqr; i++) { //遍历2~根号num
              if (num % i == 0) return false;
          }
          return true;
      }
      
      void dfs(int index, int nowK, int sum) {
          if (nowK == k) { //选中k个数
              if (isPrime(sum)) { //如果和为素数
                  cnt++;
              }
              return;
          }
          if (index == n || nowK > k) { //已经处理完n个数,或者超过k个数,返回
              return;
          }
          //选index号数
          dfs(index + 1, nowK + 1, sum + x[index]);
          //不选index号数
          dfs(index + 1, nowK, sum);
      }
      
      
      int main() {
          scanf("%d %d", &n, &k);
          for (int i = 0; i < n; i++) {
              scanf("%d", &x[i]);
          }
          dfs(0, 0, 0);
          printf("%d", cnt);
          return 0;
      }
      

      点个赞呗!!!

      • 1

      信息

      ID
      684
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      56
      已通过
      25
      上传者