素数环

举报
Linux猿 发表于 2021/08/06 00:16:30 2021/08/06
【摘要】 Prime Ring Problem Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 18   Accepted Submission(s) : 12 F...

Prime Ring Problem

Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 18   Accepted Submission(s) : 12

Font: Times New Roman |Verdana |Georgia 

Font Size: ← →

Problem Description

A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime.

Note: the number of first circle should always be 1.


Input

n (0 < n < 20).

Output

The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order.
You are to write a program that completes above process.
Print a blank line after each case.

Sample Input

6
8

Sample Output

Case 1:
1 4 3 2 5 6
1 6 5 2 3 4

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

Source

Asia 1996, Shanghai (Mainland China)
代码:
 

   
  1. #include <stdio.h>
  2. #include <string.h>
  3. int n,ac[21]={1};
  4. bool in[21];
  5. bool is_prime(int x)
  6. {
  7. for(int i=2;i*i<=x;i++)
  8. if(x%i==0)
  9. return false;
  10. return true;
  11. }
  12. void dfs(int cur)
  13. {
  14. if(cur == n-1)
  15. {
  16. if(is_prime(ac[cur]+1))
  17. {
  18. printf("1");
  19. for(int i=1;i<n;i++)
  20. printf(" %d",ac[i]);
  21. printf("\n");
  22. }
  23. return ;
  24. }
  25. for(int i=2;i<=n;i++)
  26. {
  27. if(!in[i] && is_prime(i+ac[cur]))
  28. {
  29. in[i]=1;
  30. ac[cur+1]=i;
  31. dfs(cur+1);
  32. in[i]=0;
  33. }
  34. }
  35. }
  36. int main()
  37. {
  38. int ncase=0;
  39. while(scanf("%d",&n),n)
  40. {
  41. printf("Case %d:\n",++ncase);
  42. memset(in,0,sizeof(in));
  43. if(n%2==0 || n==1)
  44. dfs(0);
  45. else
  46. printf("No Answer\n");
  47. }
  48. return 0;
  49. }

              

文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nyist_zxp/article/details/9148191

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。