Twins (20 分)
Jacky最近迷上素数,他通过观察发现,很多素数倒着读也是素数,有点像孪生兄弟,比如13是素数,31也是素数,再比如107是素数,701也是素数,请你帮忙Jacky测试某个素数是否有孪生兄弟。
输入格式:
输入一个素数n(n<10000)
输出格式:
如果n有孪生兄弟,输出“Yes”,否则,输出“No”
输入样例:
13
结尾无空行
输出样例:
Yes
结尾无空行
Twins (20 分)
Jacky最近迷上素数,他通过观察发现,很多素数倒着读也是素数,有点像孪生兄弟,比如13是素数,31也是素数,再比如107是素数,701也是素数,请你帮忙Jacky测试某个素数是否有孪生兄弟。
输入格式:
输入一个素数n(n<10000)
输出格式:
如果n有孪生兄弟,输出“Yes”,否则,输出“No”
输入样例:
13
结尾无空行
输出样例:
Yes
结尾无空行
一个实现:
#include <stdio.h>
int main(void){
int num,twins;
int i,j=1;
int k=1;
int start= 0;
//读入一个数
scanf("%d",&num);
int temp;
//分解千位
temp=num/1000;
//千位不为0,则读入twins,同时标志数已经开始,将开始标志设为1
if(temp!=0){
twins+=temp*k;
start = 1;
// printf("千位:%d\n",twins);
}
//分解百位
temp= num/100%10;
//如果已经有数,将分解数的权值乘以10
if (start==1){
k*=10;
}
//百位不为0,则读入twins,同时标志数已经开始,将开始标志设为1
if(temp!=0){
twins+= temp*k;
start=1;
// printf("百位:%d\n",twins);
}
//分解十位
temp = num/10%10;
//如果已经有数,将分解数的权值乘以10
if (start==1){
k*=10;
}
//十位不为0,则读入twins,同时标志数已经开始,将开始标志设为1
if(temp!=0){
twins+=temp*k;
start=1;
// printf("十位:%d\n",twins);
}
//分解个位
temp = num%10;
//如果已经有数,将分解数的权值乘以10
if (start==1){
k*=10;
}
//个位不为0,则读入twins,同时标志数已经开始,将开始标志设为1
if(temp!=0){
twins += temp *k;
// printf("个位:%d\n",twins);
}
// printf("twins=%d\n",twins);
//判断孪生数是否为素数,并打印结果
for(i=2;i<twins;i++){
if(twins%i==0){
j=0;
printf("No");
break;
}
}
if(j==1){
printf("Yes");
}
return 0;
}