五位以内的对称素数
时间: 1ms 内存:64M
描述:
判断一个数是否为对称且不大于五位数的素数。
输入:
输入数据含有不多于50个的正整数(0<n<232)。
输出:
对于每个n,如果该数是不大于五位数的对称素数,则输出“Yes”,否则输出“No”。每个判断结果单独列一行。
示例输入:
11 101 272
示例输出:
Yes
Yes
No
提示:
参考答案(内存最优[752]):
/*判断小于五位数的对称素数*/
#include<stdio.h>
int P(int a)//建立一个判断素数的函数
{
int i;
for(i=2;i<=a/2;i++)
if(a%i==0)
return 0;//否返回0
return 1;//是返回1
}
int dc(int a)//判断是否对称
{
int i=1,c=11,j=0,a1,a2,a3,a4,a5;
while(c>=10)//判断几位数
{
c=a/i;
i=i*10;
j++;
}
switch(j)//找出每一位数,判断是否对称
{
case 1:return 0;
case 2:{a1=a%10;a2=(a%100-a1)/10;if(a1==a2)return 1;else return 0;}
case 3:{a1=a%10;a2=(a%100-a1)/10;a3=(a%1000-a1-a2)/100;if(a1==a3)return 1;else return 0;}
case 4:{a1=a%10;a2=(a%100-a1)/10;a3=(a%1000-a1-a2)/100;a4=(a%10000-a1-a2-a3)/1000;if(a1==a4&&a2==a3)return 1;else return 0;}
case 5:{a1=a%10;a2=(a%100-a1)/10;a3=(a%1000-a1-a2)/100;a4=(a%10000-a1-a2-a3)/1000;a5=a/10000;if(a1==a4&&a2==a3)return 1;else return 0;}
}
return 0;
}
void main()
{
int n,i=0;
while(scanf("%d",&n)!=EOF&&i<=50)//多组数据
{
i++;
if(n<=99999&&n>0)
{
if(dc(n)==1&&P(n)==1)
printf("Yes\n");
else
printf("No\n");
}
else
printf("No\n");
}
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<math.h>
int main(){
int test(int n);
int cheak(int n);
int n;
while(scanf("%d",&n)==1){
if(test(n)){
if(cheak(n)){
printf("Yes\n");
}else{printf("No\n");}
}else{printf("No\n");}
}
return 0;
}
int test(int n){
int a[5];
int i=0,j;
do{
a[i++]=n%10;
n=n/10;
}while(n/10);
a[i]=n%10;
for(j=0;j<=i;j++,i--){
if(a[i]!=a[j])break;
}
if(j>=i){return 1;
}else {return 0;}
}
int cheak(int n){
int i,t;
if(n==2)return 1;
t=(int)sqrt(n);
for(i=2;i<t;i++){
if(n%i==0)break;
}
if(i>=t){return 1;
}else{return 0;}
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。