键盘接收两个正整数,输出它们之间的最大6个回文素数。要求每行输出两个数。如果不足6个,要报告实际个数
#include<stdio.h>
#include<math.h>
int IsPrime(int n);
int hws(int n);
int main( )
{
int n,i,j=0;
int a,b,m[100];
scanf("%d %d",&a,&b);
for(i=a;i<=b;i++)
{
if(hws(i))
{
if(IsPrime(i))
{
m[j]=i;
j++;
}
}
}
if(j<6)
{
printf("回文素数个数为:%d\n",j);
for(i=j-1;i>=0;i--)
{
printf("%d ",m[i]);
if(i%2!=0 && j%2!=0)
{
printf("\n");
}
}
}
else{
for(i=j-1;i>=j-6;i--)
{
printf("%d ",m[i]);
if(i%2==0)
{
printf("\n");
}
}
}
return 0;
}
//判断是否素数
int IsPrime(int n)
{
int flag=1;
int i;
if(n<2)
{
flag=0;
}
for(i=2;i<n;i++)
{
if(n%i==0)
{
flag=0;
break;
}
}
return flag;
}
//判断是否回文数
int hws(int n)
{
int x=n,y=0,b;
while(x!=0)
{
b= x%10;
y= y*10+b;
x =x/10;
}
if(n==y)
{
return 1;
}
else
{
return 0;
}
}
很简单:
供参考:
#include <stdio.h>
int hw(int s) //判断回文
{
int a = 0,b = s;
while (b)
{
a = a * 10 + b % 10;
b /= 10;
}
return a == s;
}
int su(int s) //判断素数
{
if (s < 4) return s > 1;
if (!(s & 1)) return 0;
for(int i = 3; i * i <= s ;i++)
if(s % i==0) return 0;
return 1;
}
int main()
{
int m,n,t,i;
scanf("%d%d",&m,&n);
if (m > n) t=m,m=n,n=t;
for(i = n, t = 0;i >= m && t < 6; i--){ //输出m n之间的最大6个回文素数
if(su(i) && hw(i)){
t++;
printf(t%2==0 ? "%d\n" : "%d ",i);
}
}
if (t < 6) printf(t%2==0?"%d":"\n%d",t); //如果不足6个,要报告实际个数
return 0;
}