문제 링크입니다: www.acmicpc.net/problem/2061
2061번: 좋은 암호
암호화 방식 중에는 소수를 이용하는 것들이 많다. 보통은 매우 큰 두 개의 소수를 선택하고, 두 소수를 곱한 값을 암호화에서의 키로 사용하고는 한다. 이러한 방법이 좋은 이유는 일반적으로
www.acmicpc.net
백준 1837번 암호제작(jaimemin.tistory.com/1663)과 동일한 문제였습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <vector> | |
using namespace std; | |
const int MAX = 1000000 + 1; | |
int minFactor[MAX]; | |
vector<int> primeNumbers; | |
void eratosthenes(int K) | |
{ | |
minFactor[0] = minFactor[1] = -1; | |
for (int i = 2; i < K; i++) | |
{ | |
minFactor[i] = i; | |
} | |
for (int i = 2; i*i < K; i++) | |
{ | |
if (minFactor[i] == i) | |
{ | |
for (int j = i * i; j < K; j += i) | |
{ | |
if (minFactor[j] == j) | |
{ | |
minFactor[j] = i; | |
} | |
} | |
} | |
} | |
for (int i = 2; i < K; i++) | |
{ | |
if (minFactor[i] == i) | |
{ | |
primeNumbers.push_back(i); | |
} | |
} | |
} | |
int main(void) | |
{ | |
ios_base::sync_with_stdio(0); | |
cin.tie(0); | |
string p; | |
int K; | |
cin >> p >> K; | |
eratosthenes(K); | |
for (int primeNumber : primeNumbers) | |
{ | |
int div = 0, temp = 1; | |
for (int i = p.length() - 1; i >= 0; i--) | |
{ | |
div = (div + (p[i] - '0') * temp) % primeNumber; | |
temp *= 10; | |
temp %= primeNumber; | |
} | |
if (div == 0) | |
{ | |
cout << "BAD " << primeNumber << "\n"; | |
return 0; | |
} | |
} | |
cout << "GOOD\n"; | |
return 0; | |
} |


개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2439번 별 찍기 - 2 (0) | 2021.04.14 |
---|---|
백준 2438번 별 찍기 - 1 (0) | 2021.04.14 |
백준 2052번 지수연산 (0) | 2021.04.09 |
백준 1975번 Number Game (0) | 2021.04.09 |
백준 21300번 Bottle Return (2) | 2021.04.08 |