アルゴリズムコンテスト入門経典双子素数
nとn+2が共に素数であれば,双子素数と呼ぶ.mを入力し、連個数がmを超えない最大双晶素数を出力します.5<=m<=10000.例えばm=20の場合の答えは17,19,m=1000の場合の答えは881,883である.
注:機能を再利用する必要がある場合は、関数を定義できます.
ASSERT
構文:
#include void assert( int exp );
機能:マクロassert()はエラー検出に使用されます.式の結果がゼロの場合、マクロはstdERRにエラーメッセージを書き込み、プログラム実行を終了します.マクロNDEBUGが定義されている場合、マクロassert()は無視されます.
関連トピック:
//
#include<stdio.h>
// x
int is_prime(int x){
int i;
for(i=2;i*i<=x;i++)
if(x%i==0)return 0;
return 1;
}
int main(){
int i,m;
scanf("%d",&m);
for(i=m-2;i>=3;i--)
if(is_prime(i) && is_prime(i+2))
{
printf("%d %d
",i,i+2);
break;
}
return 0;
}
注:機能を再利用する必要がある場合は、関数を定義できます.
//
#include<stdio.h>
#include<math.h>
#include<assert.h>
// x
int is_prime(int x){
int i,m;
assert(x>=0);
if(x==1) return 0;
m=floor(sqrt(x)+0.5);//
for(i=2;i<=m;i++)
if(x%i==0)return 0;
return 1;
}
int main(){
int i,m;
scanf("%d",&m);
for(i=m-2;i>=3;i--)
if(is_prime(i) && is_prime(i+2))
{
printf("%d %d
",i,i+2);
break;
}
return 0;
}
プログラムはassert.を使用する.hのassertマクロは不正な関数呼び出しを制限し、x>=0が成立しない場合、プログラムは異常に終了する.ASSERT
構文:
#include
機能:マクロassert()はエラー検出に使用されます.式の結果がゼロの場合、マクロはstdERRにエラーメッセージを書き込み、プログラム実行を終了します.マクロNDEBUGが定義されている場合、マクロassert()は無視されます.
関連トピック: