1. 程式人生 > 其它 >1015 Reversible Primes (20分)

1015 Reversible Primes (20分)

技術標籤:C/C++PATc演算法資料結構c++

A reversible prime in any number system is a prime whose “reverse” in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime.

Now given any two positive integers N (<10^5) and D (1<D≤10), you are supposed to tell if N is a reversible prime with radix D.

Input Specification:

The input file consists of several test cases. Each case occupies a line which contains two integers N and D. The input is finished by a negative N.

Output Specification:

For each test case, print in one line Yes if N is a reversible prime with radix D, or No if not.

Sample Output:

Yes
Yes
No

Sample Input:

73 10
23 2
23 10
-2

思路

思路不難。沒學過C++,想用string練練手,熟悉一下STL。

如果輸入的進位制是10進位制,則將N轉為字串後直接用reverse()進行倒置,然後判斷是否為素數;

如果輸入的進位制是其他進位制,將N化為對應進位制的數並存到字串中,然後reverse()倒置,倒置完了後再轉為10進位制真值,進而判斷是否為素數。

程式碼

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <cmath> using namespace std; int sushu(int num){ if(num == 1) return 0; for(int i=2; i<=sqrt(num); i++){ if(num % i == 0) return 0; } return 1; } int reverse_check(int num, int radix){ int real_num_reverse=0; string real_num_reverse_str; stringstream ss; int yushu; if(radix == 10){ ss << num; ss >> real_num_reverse_str; reverse(real_num_reverse_str.begin(), real_num_reverse_str.end()); ss.clear(); ss << real_num_reverse_str; ss >> real_num_reverse; if(sushu(real_num_reverse) == 1) return 1; else return 0; } while(num > 0){ yushu = num % radix; real_num_reverse_str.push_back((yushu + '0')); num /= radix; } real_num_reverse = 0; for(int i=real_num_reverse_str.size()-1; i>=0; i--){ real_num_reverse += (real_num_reverse_str[i]-'0')*pow(radix, real_num_reverse_str.size()-1-i); } if(sushu(real_num_reverse) == 1) return 1; else return 0; } int main(){ string str; int N, D; while(1){ cin>>N; if(N<0) break; cin>>D; if(sushu(N) == 0){ cout<<"No"<<endl; continue; } if(reverse_check(N, D) == 1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }