您的位置:首页 > 编程语言 > C语言/C++

1231. The Embarrassed Cryptography

2014-11-20 17:33 211 查看
#include <iostream>
#include <cstring>
#include <vector>
#define N 1000001

using namespace std;

string num;
int length;
bool isPrime
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ sicily 算法