#include <stdio.h>
#include <stdlib.h>
#include<math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*
代码中学习ACM,才是王道!
孪生素数问题:输入m,输出两个数均不超过m的最大孪生数(也就是n是素数,n+2是素数,这两个数就是孪生素数)。5<=m<=1000
例如:
输入:20
输出:17 19
输入:1000
输出:881 883
*/
//判断一个数是否是素数,是返回1,不是返回0
int is_prime(int n)
{
//求平方根,并四舍五入
int m=floor(sqrt(n) +0.5);
//判定素数的条件,如果一个数,被2到平方根之间,且小于自己的数整除,就是素数
int i;
if(n==1)
return 0; //注意:1不是素数
for(i=2;i<=m;i++)
{
//不是素数,返回0
if(n%i==0) return 0;
}
return 1;
}
int main(int argc, char *argv[]) {
int n;
scanf("%d",&n);
int j;
//从大到小
for(j=n;j>=3;j--)
{
if(is_prime(j)&&is_prime(j-2))
{
printf("%d\n",j);
printf("%d",j-2);
//获得解,跳出
break;
}
}
return 0;
}
孪生素数
最新推荐文章于 2021-02-13 03:42:34 发布