如果n和n+2都是素数,则称他们是孪生素数。输入m,输出连个数均不超过m的最大孪生素数。5<=m<=10000.例如m=20时的答案是17、19,m=1000时的答案是881、883.
//孪生素数
#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\n",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\n",i,i+2);
break;
}
return 0;
}
程序使用了assert.h中的assert宏来限制非法的函数调用,当x>=0不成立时,程序将异常终止。
ASSERT
语法:
#include <assert.h> void assert( int exp ); |
相关主题: