Go: package main

import (
	"bufio"
	"os"
		"strconv"
	"fmt"
	)

var scanner= bufio.NewScanner(os.Stdin)

func main() {
	MAX := 10001
	SQRT := 100
	isPrime := make([]bool, MAX)
	for i :=range isPrime {
		isPrime[i] = true
	}
	for i := 3; i < SQRT; i += 2 {
		if isPrime[i] {
			for j := i*i; j < MAX; j += i {
				isPrime[j] = false
			}
		}
	}
	// log.Println(isPrime)
	tbl := make([]int, MAX)
	ans := 0
	for i := 5; i < MAX; i += 2 {
		if isPrime[i] && isPrime[i-2] {
			ans = i
		}
		tbl[i] = ans
	}
	// log.Println(tbl)
	for scanner.Scan() {
		n, _ := strconv.Atoi(scanner.Text())
		if n == 0 {
			break
		}
		if n&1 == 0 {
			n--
		}
		fmt.Printf("%d %d\n", tbl[n]-2, tbl[n])
	}
}

C++: #include<stdio.h>
const int MAX_V=10000;
int prime[MAX_V+1];
int main(){
  int i,k,n,p,q,v;
  for(i=2;i<=MAX_V;i++){
    prime[i]=1;
  }
  for(i=2;i*i<=MAX_V;i++){
    if(prime[i]){
      for(k=2*i;k<=MAX_V;k+=i){
        prime[k]=0;
      }
    }
  }
  while(1){
    scanf("%d",&n);
    if(n==0)break;
    for(v=n-2;v>=2;v--){
      int isprime=prime[v]*prime[v+2];
      if(isprime){
        printf("%d %d\n",v,v+2);
        break;
      }
    }
  }
  return 0;
}

C++: #include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    bool sieve[10001] = {};
    sieve[0] = sieve[1] = true;
    for (int i=2; i*i<10001; ++i) {
        if ( ! sieve[i]) {
            for (int j=i*i; j<10001; j+=i) {
                sieve[j] = true;
            }
        }
    }
    int n;
    while (cin >> n, n) {
        for (int i=n; i>=5; --i) {
            if ( ! sieve[i-2] && ! sieve[i]) {
                cout << i-2 << " " << i << endl;
                break;
            }
        }
    }
    return 0;
}

C++: #include<iostream>
#include<fstream>
#include<sstream>
#include<cstdio>
#include<vector>
#include<list>
#include<stack>
#include<queue>
#include<deque>
#include<map>
#include<set>
#include<algorithm>
#include<string>
#include<cmath>
#include<cstdlib>
using namespace std;

int power(int b,int e,int p){
	int ret = 1;
	while(e>0){
		if((e&1)!=0){	
			ret = (ret*b)%p;
		}
		b = (b*b)%p;
		e>>=1;
	}
	return ret%p;
}

bool fermat(int p){
	if(p<=1)return false;
	if(p!=2 && p%2==0)return false;
	if(p!=3 && p%3==0)return false;
	if(p!=5 && p%5==0)return false;
	if(p!=7 && p%7==0)return false;
	if(p!=11 && p%11==0)return false;

	for(int x=0;x<100;++x){
		int a = rand()%(p-1)+1;
		if(power(a,p-1,p)!=1)return false;
	}
	return true;
}
int main(){
	int n;
	while(scanf("%d",&n)==1,n){
		if(n%2==0)n--;
		while(n>=5){
			if(fermat(n) && fermat(n-2)){
				cout<<n-2<<" "<<n<<endl;
				break;
			}
			n-=2;	
		}
	}
	return 0;

}

C++: #include<stdio.h>
int isprime(int n){
  int i;
  for(i=2;i*i<=n;i++){
    if(n%i==0)return 0;
  }
  return 1;
}
int main(){
  int i,n;
  int data[10000]={1};
  while(1){
    scanf("%d",&n);
    if(n==0)break;
    for(i=0;i<n;i++){
      data[i]=isprime(i);
      //printf("%d %d\n",i,data[i]);
    }
    for(i=n;i>=0;i--){
      if(data[i]==1 && data[i-2]==1){
        break;
      }
    }
    printf("%d %d\n",i-2,i);
  }
  return 0;
}

C++: #include <iostream>
using namespace std;

const int MAX = 100001;
char p[MAX] = {0};

int main(){
	for(int i=2 ; i < MAX ; i++ ) p[i] = 1;
	for(int i=2 ; i*i < MAX ; i++ ){
		if( p[i] ){
			for(int j=i+i ; j < MAX ; j += i ){
				p[j] = 0;
			}
		}
	}
	
	int n;
	while( cin >> n , n ){
		int a, b;
		for(int i=2 ; i <= n ; i++ ){
			if( p[i-2] && p[i] ){
				a = i-2;
				b = i;
			}
		}
		cout << a << " " << b << endl;
	}
}

C++: #include <iostream> // C++の入出力
#include <stdio.h> // C の入出力
#include <algorithm> // sort などのアルゴリズム
#include <string.h> // C の文字列用
#include <ctype.h> // C の文字種用
#include <string> // C++の文字列
using namespace std;
const int Max=10000000;
bool prime[Max];
int main(void){
    int in,i;
    for(int i=0;i<Max;i++)prime[i]=true;
    prime[1]=false;
    for(int i=2;i<Max;i++){
        if(prime[i]){
            for(int s=i*2;s<=Max;s+=i)prime[s]=false;
        }
    }
    while(1){
        cin>>in;
        if(in==0)break;
        for(i=in;i>0;i--){
            if(prime[i]==true&&prime[i-2]==true){
                cout<<i-2<<" "<<i<<"\n";
                break;
            }
        }
        
    }
    return 0;
}

C++: #include<iostream>
#include<fstream>
#include<vector>
#define N 10000

int gcd(int q1,int p1){
    if(q1%p1==0) return p1;
    return gcd(p1,q1%p1);
}

//jが素数なら1、違うなら0を返す
int sosu(int j){
    if(j<2)return 0;
    if(j==2)return 1;
    if(j%2==0)return 0;
    for(int i=3; i<=j/2; i++){
        if(j%i==0)return 0;
    }
    return 1;
}

int main(){
    std::vector<int> n;
    n.resize(N);
    //入力
    for(int i=0; i<N; i++){
        std::cin >> n[i];
        if(n[i]==0)break;
    }
    for(int i=0; i<N; i++){
        if(n[i]==0)break;
        for(int j=n[i]; j>5; j--){
            if(sosu(j)&&sosu(j-2))
                if(gcd(j,j-2)==1){
                    std::cout << j-2 << " " << j <<std::endl;
                    break;
                }
            }
        }
    return 0;
}

C++: #include<bits/stdc++.h>
using namespace std;

int main(){
  int prime[10001]={0};

  prime[0]=prime[1]=1;
  for(int i=2;i<sqrt(10000);i++){
    if(!prime[i]){
      for(int j=0;i*(j+2)<10000;j++){
	prime[i*(j+2)]=1;
      }
    }
  }

  int n;
  while(cin>> n,n){
    for(int i=n;i>1;i--){
      if(!prime[i] && !prime[i-2]){
	printf("%d %d\n",i-2,i);
	break;
      }
    }
  }
}

C++: #include <stdio.h>

int main() {
    int i, k, v,an1,an2,suu;
    int MAX_V = 1000000;
    int prime[MAX_V+1];
    for(i = 2; i <= MAX_V; i++) {
        prime[i] = 1;
    }
    for(i = 2; i*i <= MAX_V; i++) {
        if(prime[i]) {
            for(k = 2 * i; k <= MAX_V; k += i) {
                prime[k] = 0;   
            } 
        }
    }
    while(1){
        scanf("%d",&suu);
        if(suu == 0)  break;
        for(k=2;k<=suu;k++){
            if(prime[k-2]==1 && prime[k]==1){
        	    an1=k-2;
        	    an2=k;
            }
        }
        printf("%d %d\n",an1,an2);
    }
    return 0; 
}

C++: #include<cstdio>
#include<cstring>
#include<algorithm>
#include<functional>
using namespace std;
int main(void)
{
	int i,j,n,max,mx;
	int flg[10001];
	while(1) {
		scanf("%d",&n);
		if(n==0) break;
		for(i=2;i<=n;i++) flg[i]=1;
		for(i=2;i*i<=n;i++) {
			if(flg[i]==1) for(j=2;j*i<=n;j++) flg[i*j]=0;
		}
		max=-1;
		for(i=n;i>=5;i--)	{
			if(flg[i]==1 && flg[i-2]==1)	break;
		}
		max=i-2;
//		for(i=2;i<n;i++) {
//			if(flg[i]==1 && flg[i]==flg[i+2] && i+2<=n) {
//				if(max<i) max=i;
//			}
//		}
		printf("%d %d\n",max,max+2);
	}
	return 0;
}

C++: #include<iostream>
#include<string>
using namespace std;

bool primenumver(int a){
	for (int b = 2;; b += 2) {
		if (a%b == 0)return false;
		if ((b + 1)*(b+ 1) >a)return true;
		if (b == 2)b--;
	}
}
int main() 
{
	while (1) {
		int a;
		cin >> a;
		if (a == 0)break;
		if (a % 2 == 0) {
			for (int b = a-1;; b -= 2) {
				if (primenumver(b) && primenumver(b - 2)) { cout << b - 2 << " " << b<<endl; break; }
			}
		}
		else {
			for (int b = a;; b -= 2) {
				if (primenumver(b) && primenumver(b - 2)) { cout << b - 2 << " " << b<<endl; break; }
			}
		}
	}
}

C++: #include <stdio.h>

int isprime(int n) {
	int i;
	for(i = 2; i * i <= n; i++) {
		if(n % i == 0) {
			return 0;
		}
	}
	return 1;
}

int main() {
	int n,i;
	int sousi[2];
	int prime[10100][2];
	for (i = 0; i < 10100; i++) {
		prime[i][0] = i;
	}
	while(1) {
		sousi[0] = 0;
		sousi[1] = 0;	 
		scanf("%d",&n);
		for (i = 0; i < n; i++) {
			prime[i][1] = 0;
		}
		if(n == 0) {
			break;
		}
		for(i = 0; i <= n; i++) {
			prime[i][1] = isprime(prime[i][0]);
		}
		for(i = n; i > 2; i--) {
			if(prime[i][1] == 1 && prime[i - 2][1] == 1) {
				sousi[0] = prime[i - 2][0];
				sousi[1] = prime[i][0];
				break;
			}
		}
		printf("%d %d\n",sousi[0],sousi[1]);
	}
	return 0;
}