#include <iostream>
#include <cstring>
#include <vector>
#define N 1000001
using namespace std;
string num;
int length;
bool isPrime[N];
vector<int> prime;
vector<int> longNum;
void init() {
memset(isPrime, true, sizeof(isPrime));
isPrime[0] = false;
isPrime[1] = false;
prime.push_back(2);
for(long i = 2; i * 2 < N; i++) {
isPrime[2*i] = false;
}
for(long i = 3; i < N; i += 2) {
if(isPrime[i]) {
prime.push_back(i);
for(long j = 2 * i; j < N; j += i) {
isPrime[j] = false;
}
}
}
}
void transfer() {
longNum.clear();
int tmplen = num.length();
longNum.resize(tmplen);
for(int i = 0; i < tmplen; i++) {
longNum[i] = (static_cast<int>(num[i] - '0'));
}
}
bool canMod(int divider) {
int tmp = 0;
for(int i = 0; i < longNum.size(); i++) {
tmp = tmp * 10 + longNum[i];
if(i % 3 == 0) {
tmp %= divider;
}
}
tmp %= divider;
if(tmp == 0) {
return true;
}
return false;
}
void find() {
bool unsafe = false;
int mark;
for(int i = 0; i < prime.size(); i++) {
if(canMod(prime[i])) {
if(prime[i] < length) {
unsafe = true;
mark = prime[i];
}
break;
}
}
if(unsafe) {
cout << "BAD " << mark << endl;
}
else {
cout << "GOOD" << endl;
}
}
int main() {
init();
while(cin >> num >> length) {
if(num == "0" || length == 0) {
break;
}
transfer();
find();
}
return 0;
}
1231. The Embarrassed Cryptography
最新推荐文章于 2024-06-23 10:36:46 发布