“性感素数”是指形如 (p, p+6) 这样的一对素数。之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。(原文摘自 http://mathworld.wolfram.com/SexyPrimes.html)
现给定一个整数,请你判断其是否为一个性感素数。
输入格式:
输入在一行中给出一个正整数 N (≤108)。
输出格式:
若 N 是一个性感素数,则在一行中输出 Yes
,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。若 N 不是性感素数,则在一行中输出 No
,然后在第二行输出大于 N 的最小性感素数。
输入样例 1:
47
输出样例 1:
Yes
41
输入样例 2:
21
输出样例 2:
No
23
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,flag1=0,flag2=0,t,m=0,q1,q2;
scanf("%d",&n);
int k=sqrt(n);
for(i=2;i<=k;i++)
{
if(n%i==0)
{m=1;}
}
if(m==1)
{flag2=1;}
int a1=n+6,a2=n-6;
int k1=sqrt(a1);
for(i=2;i<=k1;i++)
{if(a1%i==0) flag1=1;}
if(a2>0){int k2=sqrt(a2);
for(i=2;i<=k2;i++)
{if(a2%i==0) flag2=1;}}
else{flag2=1;flag1=1;}
if((flag1==0&&flag2==0)||(flag1!=0&&flag2==0))
{printf("Yes\n");
printf("%d",a2);}
if(flag1==0&&flag2!=0)
{printf("Yes\n");printf("%d",a1);}
if(flag1!=0&&flag2!=0)
{
for(i=n+1;;i++)
{
t=0;q1=0;q2=0;
int q=sqrt(i);
for(j=2;j<=q;j++)
{
if(i%j==0)
{t=1;}
}
if(t==0)
{
int b1=sqrt(i-6),b2=sqrt(i+6);
if(i-6>=2){
for(j=2;j<=b1;j++)
{if((i-6)%j==0){q1=1;}}}
else{q1=1;}
for(j=2;j<=b2;j++)
{if((i+6)%j==0){q2=1;}}
if(q1!=0&&q2!=0){continue;}
else{printf("No\n");printf("%d",i);break;}
}
}
}
}