免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
任意の数のシステムにおいて可逆プライムは、その「逆」という数システムにおいても素数である素数です。その逆37も素数であるので、例えば小数システム73に可逆素数です。
今、任意の2つの正の整数N(<10与えられた
5
)とD(1 <D≤10)、あなたはNが基数D.との可逆素数であるかどうか言うことになっています
入力仕様:
入力ファイルは、いくつかのテストケースで構成されています。それぞれの場合は、入力が負Nで終了するNおよびD 2つの整数を含む行を占め
出力仕様:
Nは基数Dと可逆素数である、またはNoならない場合には、各テストケースについては、はい一列に印刷。
サンプル入力:
73 10
23 2
23 10
-2
のサンプル出力:
はい
はい
いいえ
#include<bits/stdc++.h>
using namespace std;
bool is_prime(long long n) {
if (n < 2) return false;
for (int i = 2; i <= sqrt(n); i++)
if (n % i == 0) return false;
return true;
}
int rev(int m, int n) {
vector<int>re;
string str;
while (m) {
re.push_back(m % n);
m /= n;
};
reverse(re.begin(), re.end());
int sum = 0;
for (int i = 0; i < re.size(); i++)
sum += pow(n, i) * re[i];
return sum;
}
int main()
{
int m, n;
vector<string>re;
while (cin >> m && m >= 0){
cin >> n;
cout << (is_prime(m) && is_prime(rev(m, n)) ? "Yes" : "No") << endl;
}
return 0;
}