ps:problems:boj:6219
                소수의 자격
| ps | |
|---|---|
| 링크 | acmicpc.net/… | 
| 출처 | BOJ | 
| 문제 번호 | 6219 | 
| 문제명 | 소수의 자격 | 
| 레벨 | 실버 3 | 
| 분류 | 
 정수론  | 
	
| 시간복잡도 | O(nloglogn) | 
| 인풋사이즈 | n<=4,000,000 | 
| 사용한 언어 | Python | 
| 제출기록 | 53792KB / 180ms | 
| 최고기록 | 180ms | 
| 해결날짜 | 2022/07/23 | 
풀이
- 범위안의 수들 중에서 조건을 만족하는 소수를 찾는 문제.
 - 전체 범위는 크지만, 조건을 만족하는 수들만 빠르게 생성해낼수 있다면, 조건을 만족하는 수들을 먼저 만들고, 그것들에 대해서 소수 판별 (Primality Test)을 해서 소수들만 뽑는 것이 효율적이다.
 - 전체 범위가 크지 않다면, 범위 내에서 소수 목록 구하기를 먼저 하고, 그중에 조건을 만족하는 수들을 뽑는 것이 효율적이다.
 - 이 문제는 범위가 크지 않으니, 소수 목록을 먼저 구하고, 그 소수들을 조건에 만족하는를 체크해서 만족하는 것들만 출력하면 된다.
 - 소수 목록을 구하는 데에 O(nloglogn), 이렇게 구해진 O(n/logn)개의 소수들에 대해서 O(1)의 조건체크를 해주면 된다. 총 시간복잡도는 O(nloglogn + n/logn) = O(nloglogn)
 
코드
"""Solution code for "BOJ 6219. 소수의 자격".
- Problem link: https://www.acmicpc.net/problem/6219
- Solution link: http://www.teferi.net/ps/problems/boj/6219
Tags: [Sieve]
"""
from teflib import numtheory
def main():
    A, B, D = [int(x) for x in input().split()]
    d_str = str(D)
    answer = 0
    for p in numtheory.prime_list(A, B):
        if d_str in str(p):
            answer += 1
    print(answer)
if __name__ == '__main__':
    main()
teflib.numtheory.prime_list
ps/problems/boj/6219.txt · 마지막으로 수정됨: 2022/07/23 03:29 저자 teferi
                
                
토론