목차

페르마의 크리스마스 정리

ps
링크acmicpc.net/…
출처BOJ
문제 번호4913
문제명페르마의 크리스마스 정리
레벨골드 4
분류

정수론

시간복잡도O(nloglogn + Qlogn)
인풋사이즈Q<=?, n<=1,000,000,
사용한 언어Python 3.11
제출기록41332KB / 84ms
최고기록84ms
해결날짜2023/03/20

풀이

코드

"""Solution code for "BOJ 4913. 페르마의 크리스마스 정리".

- Problem link: https://www.acmicpc.net/problem/4913
- Solution link: http://www.teferi.net/ps/problems/boj/4913

Tags: [number theory]
"""

import bisect
import sys
from teflib import numtheory


def main():
    L_and_U = [[int(x) for x in line.split()] for line in sys.stdin]

    max_u = max(u for l, u in L_and_U)
    primes = numtheory.prime_list(max_u)
    square_sum_primes = [2] + [p for p in primes if p % 4 == 1]
    for l, u in L_and_U:
        if l == u == -1:
            break
        prime_count = bisect.bisect_right(primes, u) - bisect.bisect_left(
            primes, l
        )
        square_sum_prime_count = (
            bisect.bisect_right(square_sum_primes, u)
        ) - bisect.bisect_left(square_sum_primes, l)

        print(l, u, prime_count, square_sum_prime_count)


if __name__ == '__main__':
    main()