1 solutions

  • 0
    @ 2024-12-11 0:09:07

    C :

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    
    int n,a[20],v[21];
    
    int prime(int m)
    {
    	int i;
    	for(i=2;i<=sqrt(m);i++)
    		if(m%i==0)
    			break;
    	if(i<=sqrt(m))
    		return 0;
    	return 1;
    }
    
    void dfs(int r)
    {
    	int i,j;
    	if(r==n)
    	{
    		if(prime(a[r-1]+1))
    		{
    			for(j=0;j<n;j++)
    				printf(j==n-1?"%d\n":"%d ",a[j]);
    		}
    		return;
    	}
    	for(i=2;i<=n;i++)
    	{
    		if(!v[i]&&prime(a[r-1]+i))
    		{
    			v[i]=1;
    			a[r]=i;
    			dfs(r+1);
    			v[i]=0;
    		}
    	}
    }
    
    int main()
    {
    	int c=0;
    	while(scanf("%d",&n)!=EOF)
    	{
    		printf("Case %d:\n",++c);
    		if(n%2==0)
    		{
    			memset(v,0,sizeof(v));
    			a[0]=v[1]=1;
    			dfs(1);
    		}
    		puts("");
    	}
    	return 0;
    }
    

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    
    int n,a[20],v[21];
    
    int prime(int m)
    {
    	int i;
    	for(i=2;i<=sqrt(m);i++)
    		if(m%i==0)
    			break;
    	if(i<=sqrt(m))
    		return 0;
    	return 1;
    }
    
    void dfs(int r)
    {
    	int i,j;
    	if(r==n)
    	{
    		if(prime(a[r-1]+1))
    		{
    			for(j=0;j<n;j++)
    				printf(j==n-1?"%d\n":"%d ",a[j]);
    		}
    		return;
    	}
    	for(i=2;i<=n;i++)
    	{
    		if(!v[i]&&prime(a[r-1]+i))
    		{
    			v[i]=1;
    			a[r]=i;
    			dfs(r+1);
    			v[i]=0;
    		}
    	}
    }
    
    int main()
    {
    	int c=0;
    	while(scanf("%d",&n)!=EOF)
    	{
    		printf("Case %d:\n",++c);
    		if(n%2==0)
    		{
    			memset(v,0,sizeof(v));
    			a[0]=v[1]=1;
    			dfs(1);
    		}
    		puts("");
    	}
    	return 0;
    }
    

    Pascal :

    var n,i,k,t:longint;
        a,b,c:array[1..100] of integer;
    
    
    procedure find(g:integer);
       var i,j,j2,sum:longint;
    
       begin
         if g>n then begin for i:=1 to n-1 do write(a[i],' '); writeln(a[n]); exit;end;
    
         for i:=2 to n do
           begin
             t:=0;
             for j:=1 to g-1 do
                if i=a[j] then begin t:=1;break;end;
    
             if t=0 then
                begin
                if g<n then sum:=a[g]+i else sum:=a[g]+1;
                 for j2:=2 to sum div 2 do
                    if sum mod j2 =0 then  begin t:=1;break;end;
                end;
    
             if t=0 then begin a[g+1]:=i;find(g+1);end;
           end;
        end;
    
    
    begin
       k:=0;
      while not eof do
        begin
          inc(k);
          writeln('Case ',k,':');
          readln(n);
          fillchar(a,sizeof(a),0);
          a[1]:=1;
          find(1);
          writeln;
        end;
    end.
    
    
    

    Java :

    import java.util.Scanner;
    
    
    public class Main {
        static int cnt;
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            while (in.hasNext()) {
                int n = in.nextInt();
                if (n == 1) {
                    System.out.println("Case " + ++cnt + ":\n");
                    continue;
                }
                init(n);
                calc(n);
            }
        }
    
        private static void init(int n) {
            used = new boolean[n];
            N = new int[n];
        }
    
        private static void calc(int n) {
            System.out.println("Case " + ++cnt + ":");
            solve(0, n);
            System.out.println();
        }
    
        static boolean[] used;
        static int[] N;
    
        private static void solve(int pos, int n) {
            if (pos == n) {
                if (valid(N.length - 1)) {
                    print();
                }
                return;
            }
    
            if (N[0] > 1) return;
    
            for (int i = 0; i < n; i++) {
                if (!used[i]) {
                    N[pos] = i + 1;
                    if (valid2(pos)) {
                        used[i] = true;
                        solve(pos + 1, n);
                        used[i] = false;
                    }
                }
            }
        }
    
        private static void print() {
            for (int i = 0; i < N.length; i++) {
                if (i == 0) {
                    System.out.print(N[0]);
                    continue;
                }
                System.out.print(" " + N[i]);
            }
            System.out.println();
        }
    
        private static boolean valid(int len) {
            boolean flag = true;
            for (int i = 0; i < len; i++) {
                if (!isPrime(N[i] + N[i + 1])) {
                    flag = false;
                    break;
                }
            }
    
    
            return isPrime(N[N.length - 1] + N[0]) ? flag : false;
        }
    
        private static boolean valid2(int len) {
            boolean flag = true;
            for (int i = 0; i < len; i++) {
                if (!isPrime(N[i] + N[i + 1])) {
                    flag = false;
                    break;
                }
            }
            return flag;
        }
    
        private static boolean isPrime(int n) {
            boolean flag = true;
            for (int i = 2; i * i <= n; i++) {
                if (n % i == 0) {
                    flag = false;
                    break;
                }
            }
    
            return flag;
        }
    }
    
    

    Python :

    p=[3,5,7,11,13,17,19,23,29,31,37]
    t=0
    def pround(r,a=[1]):
        global p
        if r==[]:
            if a[0]+a[-1] in p:
                for i in a:
                    print i,
                print
        else:
            for i in range(len(r)):
                if r[i]+a[-1] in p:
                    pround(r[:i]+r[i+1:],a+[r[i]])
    try:
        while True:
            t+=1
            r=range(2,input()+1)
            print "Case %d:"%t
            pround(r)
            print
    except:
        pass
    
    • 1

    Information

    ID
    674
    Time
    1000ms
    Memory
    32MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By