首页 > 其他分享 >素数环

素数环

时间:2023-03-27 21:46:49浏览次数:28  
标签:cnt int isused dfs 素数 bool

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
bool isprime[40];//用于判断是否为素数
bool isused[20];//用于判断是否重复使用。
int n;//数字个数
int ans[20];//用来记录答案
void dfs(int cnt);//dfs寻找答案。递归暴力枚举
int main(void){
    //预处理,因为数据只有0-16,小的要死,所以直接枚举暴力。
    for(int i = 2; i < 40; i++){
        bool flag = true;
        for(int j = 2; j < i; j++){
            if(i%j==0){
                flag = false;
                break;
            }
        }
        if(flag) isprime[i]=true;
    }
    ans[1] = 1;//素数环由1开始,所以直接填写答案1
    int i = 1;//用于case的计数
    while(cin >> n){//多组输入
        memset(isused,0,sizeof(isused));//判断重复数组清空。初始化。
        printf("Case %d:\n",i++);//先打出格式
        dfs(2);//从第二位开始搜索并填写答案。
        printf("\n");//这个不要漏了,不然会WA。恶心心。
    }
    return 0;
}
void dfs(int cnt){
    if(cnt == n+1){//递归小出口。
        for(int i = 1; i <= n; i++){
            if(i==n) printf("%d\n",ans[i]);//后面不能留空格。
            else printf("%d ", ans[i]);
        }
        return;
    }else if(cnt==n){//最后一位比较特殊,所以要单独判断。
        for(int i = 2; i <= n; i++){
            if(!isused[i] && isprime[i+ans[cnt-1]] && isprime[i+ans[1]]){//判断数字是否符合条件。
                isused[i]=1;//标记使用过
                ans[cnt]=i;//填写答案
                dfs(cnt+1);//找下一个数
                isused[i]=0;//回溯
            }
        }
    }else{
        for(int i = 2; i <= n; i++){
            if(!isused[i] && isprime[i+ans[cnt-1]]){//判断数字是否符合条件。
                isused[i]=1;//标记使用过
                ans[cnt]=i;//填写答案
                dfs(cnt+1);//找下一个数
                isused[i]=0;//回溯
            }
        }
    }
}

 

标签:cnt,int,isused,dfs,素数,bool
From: https://www.cnblogs.com/lhf123/p/17263078.html

相关文章

  • C01素数之和
    publicclassA01素数之和{publicstaticvoidmain(String[]args){intsum=0;//累加求和for(inti=2;i<=100;i++){if(isSS(i)){//如果i是素数,就累加到su......
  • 6-2 计算素数和
    本题要求计算输入两个正整数x,y(x<=y,包括x,y)素数和。函数isPrime用以判断一个数是否素数,primeSum函数返回素数和。实现代码:defisPrime(x):foriinrange(2,x):......
  • [线筛|欧拉筛]线性筛选素数
    来源:模板题目描述:用线行筛筛选素数,将指定范围的素数找出,达到O(n)的效果。思路时间复杂度0(n)思路任意值必然可以被分解为:​​a=b1^c1*b2*c2*...​​​例如​​9=3^3,15=3*5,......
  • [pat乙]1007 素数对猜想
    1007素数对猜想(20分)让我们定义dn为:dn=pn+1-pn,其中pi是第i个素数。显然有d1=1且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”......
  • [pat乙]1013 数素数
    1013数素数(20分)算法标签:欧拉筛1013数素数(20分)令P​i​​表示第i个素数。现任给两个正整数M≤N≤10​4​​,请输出P​M​​到P​N​​的所有素数。......
  • 数学知识模板之筛法求素数
    筛法求素数1.朴素筛法求素数intprimes[N],cnt;boolst[N];voidget_primes(intn){ for(inti=2;i<=n;i++) { if(st[i])continue; primes[cnt++]=......
  • 素数定理的初等证明
    住:此文中\(\log\)指代自然对数一、素数定理的弱化版即证:\[\pi(n)=\Theta\left(\frac{n}{\logn}\right)\]记:\[H(n)=\frac{1}{2}+\frac{1}{3}+\cdots+\frac{1}{n}=\s......
  • python并行计算demo,用于求0~n之间的素数之和
     想试试服务器的并行计算能力,就让cpu慢慢计算,计算0~n之间所有素数之和设置target为结尾,num_of_processors为进程数,即可开始跑如下所示frommultiprocessingimportP......
  • c代码实现素数的判断和打印
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){inti=0;for(i=100;i<=200;i++){intj=0;for(j=2;j<i;j++){if(......
  • HJ60 查找组成一个偶数最接近的两个素数
      importsysn=int(sys.stdin.readline().strip())sp=n//2l=range(sp+2)[::-1]check=1su=0j=2defchech_su(i):check=1j=2ifi==2ori==3:......