孪生素数_Andrew 孪生素数

一、如题:

如果n和n+2都是素数,则称它们是孪生素数。输入m,输出2个均不超过m的最大孪生素数。5<=m<=1000。例如m=20时候,答案为17、19,m=1000的时候,答案等于881、883。

二、分析:

首先是要判断素数,判断一个数M是否为素数,只要判断到到根号M就可以确定它是不是素数了。它如果存在因数,那么一定可以写成乘积的形式。比如M= 1 *M。如果它存在两个因数,乘积等于M,这两个因数一定一个小于根号M,一个大于根号M,因为一定存在两个相等的数乘积等于它(当然可能不是整数),这两个数就是根号M,因为M= 根号M *根号M。如果两个数都在根号M以下,乘起来小于M,如果两个数都在根号M以上,乘起来一定大于M,所以两个数分布于根号M两边,那么我们只要找到其中一半有没有这样一个整数就可以了。如果有,自然对应的另一半也有一个和它对应的数,使它们的乘积为M。其次,如何找出最大的2个孪生素数?可以把所有满足条件的孪生素数找出来再比较大小,但这样过于繁琐,所以,我们只需用一循环,从小于m的数开始倒序查找符合条件的孪生素数,一找到就输出,那输出的便是最大孪生素数了。

三、代码:

#include<stdio.h>
#include<math.h>
#include<assert.h>//程序使用了assert.h中的assert宏来限制非法的函数调用;

int is_prime(int x) //声明了一个判断素数的函数;
{
inti,m;
assert(x>=0);//当x>=0不成立的时候,程序将异常终止;
if(x==1)return 0; //特殊的:1不是素数;
m=floor(sqrt(x)+0.5); //避免了浮点误差,floor函数为向下取整;
for(i=2;i<=m;i++)
if(x%i==0) return 0; //素数的判断;
return1;
}

int main() //主函数;
孪生素数_Andrew 孪生素数
{
inti,m;
while(scanf("%d",&m)!=EOF)
for(i=m-2;i>=3;i--)//从第m-2个数开始判断,从而实现了输出“最大孪生素数”的目的;
if(is_prime(i)&&is_prime(i+2))//调用了is_prime函数;
{
printf("%d %dn",i,i+2);
break;
}
return0;
}

四、运行图:



  

爱华网本文地址 » http://www.aihuau.com/a/25101017/354652.html

更多阅读

关于梅森素数是否有无穷多个的判定方法 梅森素数有什么用

关于梅森素数是否有无穷多个的判定方法在网上读到了《梅森素数:千年不休的探索之旅》一文,知道在2300多年前,古希腊的数学家,那位写出不朽的《儿何原本》的欧儿里得证明了素数有无穷多个之后,就顺便指出:有许多素数可以写成2p-1的形式,其

哥德巴赫猜想证明与对称奇素数定理 陈景润与哥德巴赫猜想

哥德巴赫猜想证明与对称奇素数定理吕明进“任意大于4的偶数都可表为两个奇素数之和”的哥德巴赫猜想,自1742年一提出,国际上就有许多著名数学家力求攻克它,但直至20世纪20年代,进展甚微,均未获得成功。因此,英国著名数学家哈代于1921年

孪生兄妹 电视剧孪生兄妹

那是大概2000年的春节,我14、5岁,生平第一次独自出远门,去到陕南的舅舅家,在那个无聊的冬天里,我在表哥的观看下看了不完整的《孪生兄妹》,直到十年后的今天,我仍然认为它是最好看的韩剧。这十年来,我从未忘记过那对双胞胎,也从未有其他的双

素数是什么 质数

素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。有的数

素数问题,费马小定理 费马小定理证明

素数问题关于这个问题其实没有什么好说的,素数大家都知道.素数就是一个数,比1大,而且只有1和它本身两个正因子,那么它就是一个素数.一般在竞赛中很少遇到直接求素数的问题,因为毕竟筛选法求素数也太基本了一点.但是有少部份的题会考

声明:《孪生素数_Andrew 孪生素数》为网友浊酒尽余欢分享!如侵犯到您的合法权益请联系我们删除