PAT A1015进制翻转之后的数是否还是素数

    技术2023-08-05  86

    题意

    给出一个数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。我的天

    Processed: 0.009, SQL: 9