请输入一个大于2且不大于200的整数,判断该数是否为偶数,如果是偶数,将该偶数分解为两个素数之和。如果是奇数,判断该数是否为素数,如果是素数,判断该素数是否为回文素数,并找出该数的孪生素数。
“回文素数”是指一个数正读和反读都一样的素数,例如:11、121;
“孪生素数”是指一个素数与其相差为2的数也是素数,例如:3和5、5和7等。
请输入一个大于2且不大于200的整数,判断该数是否为偶数,如果是偶数,将该偶数分解为两个素数之和。如果是奇数,判断该数是否为素数,如果是素数,判断该素数是否为回文素数,并找出该数的孪生素数。
“回文素数”是指一个数正读和反读都一样的素数,例如:11、121;
“孪生素数”是指一个素数与其相差为2的数也是素数,例如:3和5、5和7等。
前几天刚好也有同学问了这道题,以下程序在VC中编译执行通过。
#include "stdio.h"
#include "math.h"
#define num 100
bool jiou(int n) //判断奇偶数
{
bool k;
if(n%2) k=true;
else k=false;
return k;
}
int sushu(int n) //判断素数
{
if(n<=1) return 0;
int j,k=0,temp=sqrt(n);
for(j=2;j<=temp;j++)
{
if((n%j)==0) break;
}
if(j>temp) return 1;
else return 0;
}
int huishu(int n) //回文素数
{
int temp=n,b=0,i, k=0;
for(i=0;n>0;n/=10,i++)
{b=(b*10)+n%10;}
if(b==temp) k=1;
return k;
}
void fengjie(int n) //偶数分解成两个素数
{
int i;
for(i=2;i<n;i++)
{
if(sushu(i)&&sushu(n-i))
{
printf("%d=%d+%d\n",n,i,n-i);
}
}
}
void main()
{
int n;
printf("请输入一个大于2且小于200的数:\n");
scanf("%d",&n);
if(n<2||n>200)return ;
int a,b;
a=n+2;
b=n-2;
if(jiou(n))
{
if(sushu(n))
{
printf("这个数为素数,");
if(huishu(n))
{
printf("回文,");
}
else printf("非回文,");
if(sushu(a)||sushu(b))
{
printf("有孪生素数:");
if(sushu(a))printf("%d ",a);
if(sushu(b))printf("%d",b);
printf ("\n");
}
else printf("无孪生素数。");
}
else printf("此数不是素数。");
}
else fengjie(n);
}