728x90
반응형
문제링크
https://www.acmicpc.net/problem/4233
4233번: 가짜소수
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, p와 a를 포함하고 있다. 입력의 마지막 줄에는 "0 0"이 주어진다. (2 < p ≤ 1,000,000,000, 1 < a < p)
www.acmicpc.net
1. 핵심
1) 10억 이상 소수 판정
- 에라토스테네스의 체로는 10억 이상의 소수 판정 불가능
- 소수 판정 하는 방법: 제곱근까지 나눠서 확인하기
2) 비트연산을 활용한 거듭제곱
2. 코드(Python)
# https://www.acmicpc.net/problem/4233
# 소수 구하기
def isPrime(n):
for i in range(2, int(n**0.5)):
if n % i == 0:
return False
return True
# 비트연산 & 제곱
def power(a, p):
mod = p
ret = 1
while p:
if p & 1 == 1:
ret *= a
ret %= mod
p >>= 1
a **= 2
a %= mod
ret %= mod
return ret
while True:
p, a = map(int, input().split())
if p == 0 and a == 0:
break
if not isPrime(p) and power(a, p) == a:
print("yes")
else:
print("no")
728x90
반응형
'PS > 백준' 카테고리의 다른 글
[그리디] 전구와 스위치(Python) (1) | 2024.02.18 |
---|---|
[DP] 호텔(Python) (0) | 2024.02.16 |
[백준/BOJ] 27172번 - 수 나누기 게임 (Python) (0) | 2023.10.28 |
[백준/BOJ] 14621번 - 나만 안되는 연애 (Python) (1) | 2023.10.21 |
[백준/BOJ] 27172번 - 수 나누기 게임 (Python) (1) | 2023.10.17 |