zoukankan      html  css  js  c++  java
  • CQOJ921B素数和

    这是用一道搜索(全排列)实现的一个数论题目。今天周六,上了一天信息,没写数学的我瑟瑟发抖。

    首先题意为给定n个数,选取k个数进行求和,输出和为素数的方案数。在写判断素数函数时,我们只需要把i枚举到根下x即可,这一点可以证明。在写全排列列时,由于我们需要枚举的是和,所以不需要再考虑顺序了,要用到三个变量(int now,int step,int sum){表示当前枚举到第几个,当前有几个数,当前的和,生成一种排列后直接判断即可。另lyx tql

    1.牢记素数判断优化。

    2.想搜索的过程中需要几个变量记录状态。

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #define maxn 21
    using namespace std;
    int n,k;
    int a[100];
    int ans=0;
    bool judge(int x){
        if(x==1) return true;
        for(int i=2;i*i<=x;i++){
            if(x%i==0) return false;
        }
        return true;
    }
    void dfs(int now,int step,int sum){//当前枚举到第几个,当前有几个数,当前的和 
        if(step==k){
            if(judge(sum)) ans++; 
            return;
        }
        for(int i=now+1;i<=n;i++){
            dfs(i,step+1,sum+a[i]);
        }
    }
    int main(){
        cin>>n>>k;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }    
        dfs(0,0,0);
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    内存缓存 原理 实现
    ssh 内在溢出
    android 解析XML方式(三)
    android 解析XML方式(二)
    android 解析XML方式(一)
    (三)、
    (二)、SSL证书
    (一)、http原理
    httpsClient实例
    飞信免费发送接口API的测试 httpClient
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11564297.html
Copyright © 2011-2022 走看看