1358 - 素数环

2024-06-12 15:12
文章标签 素数 1358

本文主要是介绍1358 - 素数环,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

从 1 \sim n1∼n 这 nn 个数,摆成一个环,要求相邻的两个数的和是素数,按照由小到大请输出所有可能的摆放形式。

比如:n = 4n=4,输出形式如下;

1:1 2 3 4
2:1 4 3 2
3:2 1 4 3
4:2 3 4 1
5:3 2 1 4
6:3 4 1 2
7:4 1 2 3
8:4 3 2 1
total:8

比如:n = 6n=6,输出形式如下;

1:1 4 3 2 5 6
2:1 6 5 2 3 4
3:2 3 4 1 6 5
4:2 5 6 1 4 3
5:3 2 5 6 1 4
6:3 4 1 6 5 2
7:4 1 6 5 2 3
8:4 3 2 5 6 1
9:5 2 3 4 1 6
10:5 6 1 4 3 2
11:6 1 4 3 2 5
12:6 5 2 3 4 1
total:12

输入

一个整数 nn ;(2 \le n \le 102≤n≤10)

输出

前若干行,每行输出一个素数环的解,最后一行,输出解的总数。

样例

输入

4

输出

1:1 2 3 4
2:1 4 3 2
3:2 1 4 3
4:2 3 4 1
5:3 2 1 4
6:3 4 1 2
7:4 1 2 3
8:4 3 2 1
total:8

来源

回溯

#include<bits/stdc++.h>
using namespace std;
const int inf=11;
int n,use[inf],f=0;
bool vis[inf];
void print(){printf("%d:",++f);for(int i=1;i<=n;i++){printf("%d ",use[i]); }printf("\n");
}
bool prime(int n){if(n<=1){return false;}for(int i=2;i*i<=n;i++){if(n%i==0){return false;}}return true;
}
void dfs(int k){if(k==n){bool flag=false;for(int i=1;i<n;i++){if(!prime(use[i]+use[i+1])){flag=true;}}if(!flag&&prime(use[1]+use[n])){print();}}for(int i=1;i<=n;i++){if(!vis[i]){vis[i]=true;use[k+1]=i;dfs(k+1);vis[i]=false;}}
}
int main(){cin>>n;dfs(0);printf("total:%d",f);return 0;
}

这篇关于1358 - 素数环的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054570

相关文章

【牛客网 2017年校招模拟笔试(第一场)】超级素数幂

超级素数幂 描述 如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。 输入 输入一个正整数n(2 ≤ n ≤ 10^18) 分析 暴力枚举幂q,将n开q次方之后得到p,检查p是否为素数,并且检查p的q次幂是否等于n。 *要注意精度问题,代码待之后补充。

素数伴侣--最大二分匹配

#include<bits/stdc++.h>using namespace std;#define N 100int edge[N][N],cx[N],cy[N];//edge记录两点的关系,如果两点相连,则edge【i】【j】为1int visited[N];//判断该店是否被访问过int nx,ny,res;const int M=60000+100;bool prim[M];

算法题--华为od机试考试(整数对最小和、素数之积、找城市)

目录 整数对最小和 题目描述 注意 输出描述 示例1 输入 输出 说明 解析 答案 素数之积 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 说明 解析 找城市 题目描述 输入 输出 示例1 输入 输出 示例2 输入 输出 说明 解析 答案 整数对最小和 考察排序,数组拍平 题目描述

判断101 - 200之间有多少个素数,并输出所有素数。

题目:判断101 - 200之间有多少个素数,并输出所有素数。 解法一:程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 void main(){long f1, f2;int i;f1 = f2 = 1;for (i = 1; i <= 20; i++){printf("%12ld %12ld", f1, f2);if (i

HDU——2097.sky数、2098.分拆素数和、2099.整除的尾数

目录 2097.sky数 题目描述 运行代码 代码思路 2098.分拆素数和 题目描述 运行代码 代码思路 2099.整除的尾数 题目描述 运行代码 代码思路 2097.sky数 题目描述 Problem - 2097 Problem Description Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这

判断一组数据哪些是素数,并统计一个数组中元素的出现频率

import java.util.HashMap;import java.util.Map;public class Test_A26 {//判断一个数是不是素数public static boolean isPrime(int num){if(num<=1){return false;}for(int i=2;i<=Math.sqrt(num);i++){if(num%i==0){retur

判决素数个数(信息学奥赛一本通-T1409)

【题目描述】 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。 【输入】 两个整数X和Y(1 ≤ X,Y ≤ 105)。 【输出】 输出一个整数,表示X,Y之间的素数个数(包括X和Y)。 【输入样例】 1 100 【输出样例】 25 【源程序】 #include<iostream>#include<cmath>using namespace std;bool prime(

素数分布 2:素数定理

素数分布:素数定理 研究素数素数的个数问题, π ( x ) \pi(x) π(x)表示不超过 x x x的素数的个数。 从到素数个数从到素数个数11002511000168101200211001200013520130016200130001273014001630014000120401500174001500011950160014500160001146017001

n!素因子分解中素数p的幂

n!素因子分解中素数p的幂为 [n/p]+[n/(p^2)]+[n/(p^3)]+…… nefu 118 传送门 n!后面有多少个0 Problem : 118 Time Limit : 1000ms Memory Limit : 65536K description 从输入中读取一个数n,求出n!中末尾0的个数。 input 输入有若干行。第一行上

hdu1431 素数回文(素数筛/埃拉托斯特尼筛法)

素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9505    Accepted Submission(s): 2221 Problem Description xiaoou33对既是素数又是回文的数特别感