首页 > 其他分享 >搜素与回溯 素数环:

搜素与回溯 素数环:

时间:2023-02-07 12:31:07浏览次数:41  
标签:search pd 20 cout int 素数 搜素 回溯


素数环:

从1到20这20个数摆成一个环,要求相邻的两个数的和是一个素数。

书上算法分析:

【算法分析】

非常明显,这是一道回溯的题目。从1开始,每个空位有20种可能,只要填进去的数合法:与前面的数不相同;与左边相邻的数的和是一个素数。第20个数还要判断和第1个数的和是否素数。

【算法流程】

1、数据初始化;   2、递归填数:判断第i个数填入是否合法;

A、如果合法:填数;判断是否到达目标(20个已填完):是,打印结果;不是,递归填下一个;

B、如果不合法:选择下一种可能;

代码实现:(自己手打一遍,加上自己的理解)

 

#include<bits/stdc++.h>
using namespace std;
bool b[21]={0};
int total=0,a[21]={0};
int print(); //输出答案
bool pd(int x,int y); //判断素数
int search(int x); //回溯方案
int main()
{

search(1);
cout<<total<<endl; //这是总方案数
return 0;
}
int search(int x)
{
int i;
for(i=1;i<=20;i++)
if(pd(a[x-1],i)&&!b[i])//和是否为素数 该数是否可用
{
a[x]=i;
b[i]=1;
if(x==20)
{
pd(a[20],a[1]);
print();
}
else search(x+1);
b[i]=0; //可以选择不用这个数,保证每种方案
}
}
bool pd(int x,int y)
{
int i=x+y,j=2;
while(j<=sqrt(i)&&i%j!=0)
j++;
if(j>sqrt(i)) return 1;
else return 0;
}
int print()
{
total++;
cout<<"<"<<total<<">"; //第几种方案
for(int j=1;j<=20;j++) //素数圈
cout<<a[j]<<" ";
cout<<endl;
}

标签:search,pd,20,cout,int,素数,搜素,回溯
From: https://blog.51cto.com/u_14932227/6041990

相关文章

  • java 深度优先搜索(回溯法)
    深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-FirstSearch)。相应地,......
  • 由Java正则表达式的灾难性回溯引发的高CPU异常:java.util.regex.Pattern$Loop.match
    问题与分析某天领导report了一个问题:线上的CPU自从上一个版本迭代后就一直处于居高不下的状况,领导看着这段时间的曲线图判断是有两条线程在不停的死循环。接到任务后去查看......
  • x64 APP栈回溯原理
    [原创]关于X64程序中RUNTIME_FUNCTION,UNWIND_INFO,UNWIND_CODE结构理解  2021-2-319:27  4012X64程序会生成一个Pdata段,用于记录每个函数的栈帧和异常信息,......
  • 回溯法学习笔记
    回溯法学习笔记目录回溯法学习笔记1,什么是回溯法2,什么时候使用回溯法3,回溯法的套路4,例题1,什么是回溯法回溯法其实是一种使用递归的暴力搜索法2,什么时候使用回溯法在常......
  • 求区间内质数(素数)
    题目:判断101~200之间有多少个质数(素数),并输出全部质数(素数)。质数(又称素数),是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数)。比1大但......
  • miller_rabin大素数随机检测模板
    用到两个定理:费马小定理二次探测定理如果是一个素数,,则方程的解为或。对于待检测数在中随机选取次判断是否成立一旦发现不成立则可判定不是素数为了......
  • 剑指offer——Day18 搜索与回溯算法(中等)
    Day182023.1.31搜索与回溯算法(中等)剑指offer55-Ⅰ.二叉树的深度自己实现这个题就是纯纯简单的DFS,当然用BFS也可以做,这里使用的是DFS代码如下:/***Definition......
  • 刷刷刷 Day 30 | 回溯总结
    [回溯总结]回溯是递归的副产品,有递归就会有回溯;回溯法经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多......
  • Java素数实例
    质数(primenumber)又称素数,有无限个。质数定义是:在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。例如,2,3,5,7,11,13,17….是素数。注意:0和1不是素数。2是......
  • 算法刷题 Day 24 | 回溯的理论基础 & 77. 组合
    今日内容:理论基础77.组合详细布置理论基础其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解......