题意
给出一个数N,和进制D,确认N和经过进制D翻转的数是否都为素数。
思路
1)先写出isPrime()函数,来确实数字是否为素数
2)再利用进制转换翻转,求出翻转后的数
3)读出时,如果只读入一个负数,则结束程序。利用
while(scanf("%d",&n)!=EOF)来解决。
代码
#include<cstdio>
#include<cmath>
using namespace std;
bool isPrime(int n){ //判断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。我的天