算法竞赛入门经典 孪生素数

来源:互联网 发布:画框图软件 编辑:程序博客网 时间:2024/06/18 16:00

如果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 );功能: 宏assert()用于错误检测。如果表达式的结果为零,宏写错误信息到STDERR并退出程序执行。如果宏NDEBUG已经定义,宏assert()将被忽略。

相关主题:



0 0
原创粉丝点击