PAT 甲级 1015 Reversible Primes
把数字的每一位保存在容器中,判断该容器保存的数字是否是素数
反转容器,判断该容器保存的数字似乎是素数
两次都返回true才输出Yes 否则输出no
判断素数:
i从2到sqrt(num)(包括) 判断num能否为i整除
注意要判断当num = 1时,返回false,否则无法通过测试点1
// 1015 Reversible Primes.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
bool isprime(vector<int> res, int d) {
int sum = 0;
for (int i = 0; i < res.size(); i++) {
//cout << res[i] << endl;
sum += res[i] * pow(d, i);
}
if (sum == 1) return false;
for (int i = 2; i <= sqrt(sum); i++) {
if (sum % i == 0) return false;
}
return true;
}
int main()
{
int n, d;
while (1) {
cin >> n >> d;
if (n < 0) break;
vector<int> res;
while (n != 0) {
res.push_back(n % d);
n /= d;
}
bool flag1, flag2;
flag1 = isprime(res, d);
reverse(res.begin(), res.end());
flag2 = isprime(res, d);
if (flag1 == true && flag2 == true) cout << "Yes\n";
else cout << "No\n";
}
return 0;
}