首页 > 代码库 > PAT1015 Reversible Primes

PAT1015 Reversible Primes

题目:PAT1015

 

题解:一道不多难的题,就是麻烦了点,把其中的细节处理好就行。

  首先要搞清楚问的是什么:给你一个十进制的数n,然后让你取n在d进制下的反序数并转换为10进制(这里假设为n1),问n和n1是否都为素数。

  所以我大概就写了检查是否为素数的函数,转换进制的函数以及取反序的函数。

  刚开始忘了考虑n,很无语...后来还是有个点不过,才想起来1既不是素数也不是合数,要把1的情况考虑进去。

 

代码:

  

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 int n,d,cou,num[64];
 7 
 8 bool isPrime(int n)//是否为素数
 9 {
10     if(n==1) return false;
11     for(int i=2;i<=sqrt(n);i++)
12     {
13         if(n%i==0) return false;
14     }
15     return true;
16 }
17 
18 void tran(int t)//10进制转换d进制
19 {
20     cou=0;
21     while(t!=0)
22     {
23         num[cou]=t%d;
24         t=t/d;
25         cou++;
26     }
27     cou--;
28 }
29 
30 int tran2()//取反序数
31 {
32     int result=0,mid;
33     for(int i=0;i<=cou;i++)
34     {
35         mid=1;
36         for(int j=0;j<cou-i;j++)
37         {
38             mid*=d;
39         }
40         result+=(num[i]*mid);
41     }
42     return result;
43 }
44 
45 int main()
46 {
47     while(scanf("%d",&n)&&n>=0)
48     {
49 
50             scanf("%d",&d);
51 
52             tran(n);
53 
54 
55             bool f=isPrime(tran2());//检查反序数是否为素数
56 
57             if(f&&isPrime(n)) printf("Yes\n");
58             else printf("No\n");
59 
60     }
61 
62     return 0;
63 }

 

PAT1015 Reversible Primes