1 条题解
-
0
C++ :
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> using namespace std; int b[20]={0},a[20],sum=0; int i,m,n,j,k; int pd (int m) { int i; for (i=2;i<=floor(sqrt(m));++i) if (m%i==0) return 0; return 1; } int pl (int s) { int i,j; for (i=2;i<=n;++i) if ((b[i]==0)&&(pd(i+a[s-1])==1)) { a[s]=i; b[i]=1; if (s==n) { if (pd(a[20]+a[1])==1) { sum+=1;if (sum>1) cout<<endl; for (j=1;j<=n;++j) if (j==1) cout<<a[j]; else cout<<" "<<a[j]; } } else pl(s+1); b[i]=0; } } int main () { cin>>n; a[1]=1; pl(2); return 0; }
Java :
import java.util.Scanner; public class Main { static int n; static int[] a = new int[50]; static boolean[] vis = new boolean[50]; static boolean[] isp = new boolean[50]; public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { n = in.nextInt(); a[0] = 1; for (int i = 2; i <= n * 2; i++) isp[i] = isPrime(i); dfs(1); } } public static void dfs(int cur) { if (cur == n && isp[a[n - 1] + a[0]]) { for (int i = 0; i < n; i++) { if (i == n - 1) System.out.println(a[i]); else System.out.print(a[i] + " "); } } else { for (int i = 2; i <= n; i++) { if (!vis[i] && isp[i + a[cur - 1]]) { a[cur] = i; vis[i] = true; dfs(cur + 1); vis[i] = false; } } } } public static boolean isPrime(int n) { if (n < 2) return false; for (int j = 2; j * j <= n; j++) if (n % j == 0) return false; return true; } }
- 1
信息
- ID
- 779
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者