#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
最新推荐文章于 2026-01-05 22:36:07 发布
本文介绍了一个用于判断大数是否为素数的算法,并通过特定的大数除法来实现。该算法首先初始化所有小于指定范围内的素数,然后将输入的大数转换成整数向量进行处理,最后通过模运算判断该大数是否可以被某些素数整除。
1242

被折叠的 条评论
为什么被折叠?



