问题描述:
孪生素数就是指相差2的素数对,例如3和5,5和7,11和13…。这个猜想正式由希尔伯特在1900年国际数学家大会的报告上第8个问题中提出,可以这样描述:存在无穷多个素数p,使得p + 2是素数。素数对(p, p + 2)称为孪生素数。请编一个程序判断区间<a,b>内部是否存在孪生素数。如果有输出yes否则输出no。
代码:
/*
*copyright (c) 2014,烟台大学计算机学院
*all rights reserved.
*文 件 名 :孪生素数.cpp
*作 者 :张 鹏
*完成日期 :2014年11月08号
*版 本 号 :v1.6
*
*问题描述 :求出区间【a,b】内部是否有孪生素数。
*输入描述 :两个整数,代表区间范围。
*程序输出 :判断。
*/
#include <iostream> //预处理指令。
#include <cmath> //要使用数学符号。
using namespace std; //使用C++的命名空间 std。
int mayc(int , int); //声明自定义函数,用于求是否有孪生素数。
int main () //函数首部。
{
int a,b,f; //定义3个变量为整型。a和b代表区间端点,f用于判断是否含有孪生素数。
cin>>a>>b; //从键盘输入a和b的值。
for (; a<=b; a++) //从a开始循环到b,求其间的孪生素数。
{
f=mayc(a,b); //调用mayc函数。判断是否有孪生素数。
if (f==1)
break; //一旦有孪生素数立即结束循环。
}
if (f==1) //循环结束判断是否有孪生素数,并输出结果。
cout<<"yes";
else cout<<"no";
return 0;
}
int mayc(int a,int b) //自定义函数mayc开始。
{
int i,z,e=0; //声明3个变量为整型。i和z用于求是否为素数,e代表返回值。
for (i=2; i<=sqrt(a); i++) //判断a是否为素数。
{
z=a%i;
if (z==0)
return e; //如果不为素数直接返回e的值。
}
a+=2; //若为素数,另a赋值为a+2。
if (a<=b) //当a+2在区间内部时候判断a+2是否为素数。
{
for (i=2; i<=sqrt(a); i++)
{
z=a%i;
if (z==0)
return e; //若不是素数直接返回e。
}
e=1;
}
return e; //若是则令e等于1然后返回e的值。代表区间内部含有孪生素数。
}
运行结果:
这是学校举办的一次编程比赛的题目,愚以为做的没错。当是oj平台判定为错误,不知为看不了错误提示,而现在也截止提交了。我很好奇我的程序为何没通过,毕竟让我纠结近一个小时。ps(10个题目2个小时时间)