题意
给出一个数N,和进制D,确认N和经过进制D翻转的数是否都为素数。
思路
1)先写出isPrime()函数,来确实数字是否为素数 2)再利用进制转换翻转,求出翻转后的数 3)读出时,如果只读入一个负数,则结束程序。利用 while(scanf("%d",&n)!=EOF)来解决。
代码
#include<cstdio>
#include<cmath>
using namespace std
;
bool isPrime(int n
){
if(n
<=1) return false;
int sqr
=(int)sqrt(1.0*n
);
for(int i
=2;i
<=sqr
;i
++){
if(n
%i
==0) return false;
}
return true;
}
int convert(int n
,int d
){
int a
[1101];
int num
=0;
while(n
){
a
[num
++]=n
%d
;
n
/=d
;
}
for(int i
=0;i
<num
;i
++){
n
=n
*d
+a
[i
];
}
return n
;
}
int main(){
int ans
;
int n
,d
;
while(scanf("%d",&n
)!=EOF){
if(n
<0) break;
scanf("%d",&d
);
if(isPrime(n
)==false){
printf("No\n");
}else{
ans
=convert(n
,d
);
if(isPrime(ans
)==true) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
坑点
1)输入的第二个进制不需要换行,不然第一行就不能输出结果 2)最坑的是,我看错了yes和no,以为都是大写,最后找了两个小时的bug。我的天