素数环问题
来源:互联网 发布:网络教育专升本有用吗 编辑:程序博客网 时间:2024/05/16 07:39
素数环问题
- 题目来源:
题目1459:Prime ring problem
#include <stdio.h>#include <map>#include <vector>using namespace std;int num=1;bool isprime(int n){ //判断数n是不是素数 if (n<2) { //若n小于2,则不是素数 return false; } else{ for (int i=2; i*i<=n; i++) { //从最小素数2,遍历至n的平方根,判断是否为素数 if(n%i==0) return false; } return true; }}void solve(vector<vector<int> >& res, vector<int> &ans, int n, map<int, int> &M){ if (ans.size()==n&&isprime(ans[0]+ans[n-1])) { //ans长度达到数组长度,且最后一个数和第一个数相加是素数,则找到一个符合的ans res.push_back(ans); return; } else{ if (ans.size()==0) { //题目要求第一个数是1 ans.push_back(1); M[1]--; } for (map<int, int>::iterator it=M.begin(); it!=M.end(); it++) { if (it->second==0||!isprime(it->first+ans[ans.size()-1])) { //如果与前一个数相加不是素数,活着该数已经添加到ans中,则跳过 continue; } else { //如果该数与前一个数相加为素数,且没添加到ans,则添加到ans;然后再递归寻找下一个数。 ans.push_back(it->first); it->second--; solve(res, ans, n, M); it->second++; ans.pop_back(); } } }}int main(int argc, const char * argv[]) {// freopen("/Users/aaa/input.txt", "r", stdin);// freopen("/Users/aaa/out.txt", "w", stdout); int n; while (scanf("%d", &n)!=EOF) { vector<int> ans; //存储单个合理解 vector<vector<int> >res; //存储所有解的集合 map<int, int> M; //定义map用于记录哪些数字已经被用过 M.clear(); for (int i=1; i<=n; i++) { M[i]++; } solve(res, ans, n, M); //解答 printf("Case %d:\n", num++); //按照格式输出解 for (int i=0; i<res.size(); i++) { int flag=1; for (int j=0; j<res[0].size(); j++) { if(flag){ printf("%d", res[i][j]); flag = 0; } else printf(" %d", res[i][j]); } printf("\n"); } printf("\n"); } return 0;}
0 0
- 素数环问题
- 素数环问题
- 素数环问题
- 素数环问题
- 素数环问题
- 素数环问题
- 素数环问题 hdu1016
- 素数环问题
- 素数环问题
- 素数环问题
- 素数环问题
- XDOJ1010--素数环问题
- 求解素数环问题
- 素数环问题
- 1008 素数环问题
- 素数环问题
- 1230 -- 素数环问题
- 素数环问题
- java四种线程池的使用
- 我的PCB电路设计(一)
- Spring MVC中防止csrf攻击的拦截器示例
- win安装多个mysql7
- react(一):初识react
- 素数环问题
- 20170302找女朋友之路思考总结
- JOptionPane的常见用法
- C++的sstream标准库详细介绍
- CODEVS 1077 多源最短路
- Android Studio引入Freeline插件,秒级编译
- 各种数据库的注释
- CentOS7 yum安装Apache(httpd)并实现多域名配置
- tomcat配置文件server.xml详解