PAT-1015 Reversible Primes (20)

#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<stack>
using namespace std;

int main()
{
    int n,d;
    stack<int> s;
    //freopen("1015-in.txt","r",stdin);
   //freopen("1015-out.txt","w",stdout);
    while(true)
    {
       scanf("%d",&n);
       if(n<0)
         break;
       scanf("%d",&d);
       
       bool flag=false;
       for(int i=2;i<=sqrt(n*1.0);i++)
       {
         if(n%i==0)
         {
            flag=true;
            break;
         }
       }
       if(flag)
       {
          printf("No
");
          continue;
       }
       int data=n;
       while(true)
       {
          int mod = data%d;
          s.push(mod);
          data=data/d;
          if(data==0)
            break;
       } 
       int exp=0;
       int sum=0;
       while(!s.empty())
       {
          int num=s.top();
          sum+=num*pow(d*1.0,exp);
          exp++;
          s.pop();
       }
       //printf("%d
",sum);
       for(int i=2;i<=sqrt(sum*1.0);i++)
       {
         if(sum%i==0)
         {
            flag=true;
            break;
         }
       }
       if(flag||sum<2)
       {
          printf("No
");
       }
       else
       {
          printf("Yes
");
       }
    }
    fclose(stdin);
    fclose(stdout);
    
    return 0;
} 
给定十进制n和d,n的d进制数反转之后转换十进制数m,判定n和m是否均为素数
一个special case
2 2
2转换成二进制后变成10,反转01,再变成十进制是1,显然不是素数了。不要理所当然就认为给的数就一定是素数。
原文地址:https://www.cnblogs.com/championlai/p/3980076.html