AOJ : 0222 - Prime Quadruplet
アルゴリズム
エラトステネスのふるいによって, あらかじめ素数表を作成しておきます.
あとは, (a-8, a-6, a-2, a) が全て素数となるようなaを, 入力値からマイナスしていきながら見つけます.
(a-8, a-6, a-2, a) にしてるのは, 入力値から順番に, マイナスしながら探索しているためです.
プログラム
#include <iostream> #include <cstring> using namespace std; char p[10000001]; void mkPrime(void){ memset(p,1,sizeof(p)); p[0] = p[1] = 0; for(int i=2;i<=10000000;i++){ if(p[i]){ for(int j=i*2;j<=10000000;j+=i){ p[j] = 0; } } } } int main(void){ mkPrime(); int n; while(cin>>n && n){ int i = n; while(!(p[i] && p[i-2] && p[i-6] && p[i-8])) i--; cout<<i<<endl; } return 0; }