プログラムの実行結果は以下の通り。
Find 4567
プログラムのソースは以下の通り。
#include "puzutl.h" YesNo checknum( int n) { if( n < 1000) return NO; // 4桁限定 int a = ( n / 1000) % 10; int b = ( n / 100 ) % 10; int c = ( n / 10 ) % 10; int d = ( n / 1 ) % 10; if( abs(a-b) == 1 && abs(b-c) == 1 && abs(c-d) == 1) return YES; return NO; } void getprime() { #define MAXPRIME 10000 byte s[MAXPRIME]; int prime[2000]; int numprime; for( int i=0; i< MAXPRIME; i++) { if( i&1) s[i] = 1; else s[i] = 0; } // 素数でない物を除く。 s[0] = 0; s[1] = 0; s[2] = 1; for( i=3; i< MAXPRIME; i+=2) { // 奇数だけ調べる if( s[i]) { // 素数が見つかった。 // 倍数を除去する。 for( int j=i*2; j< MAXPRIME; j+=i) { s[j] = 0; } } } // s[i] :1:iは素数 // 0:iは素数でない prime[0] = 2; numprime = 1; for( i=3; i< MAXPRIME; i+=2) { if( s[i]) { prime[numprime++] = i;} if( numprime >= (sizeof(prime)/sizeof(int))) break; } for( i=0; i< numprime; i++) { if( checknum( prime[i])) { ps( "Find %d\n", prime[i]); } } } int main( int argc, cstring argv[]) { getprime(); return 0; }