Buggy python submission (verdict: Time Limit Exceeded):
import math

# 素数判定関数
def isPrime(num):
    # 2未満の数字は素数ではない
    if num < 2:
        return False
    # 2は素数
    elif num == 2:
        return True
    # 偶数は素数ではない
    elif num % 2 == 0:
        return False

    # 3 ~ numまでループし、途中で割り切れる数があるか検索
    # 途中で割り切れる場合は素数ではない
    for i in range(3, math.floor(math.sqrt(num)) + 1, 2):
        if num % i == 0:
            return False

    # 素数
    return True

# 素数判定
def callIsPrime(input_num=1000):
    numbers = set()
    # ループしながら素数を検索する
    for i in range(1, input_num):
        if isPrime(i):
            numbers.add(i)

    # 素数配列を返す
    return numbers

# 関数の呼び出し
# print(callIsPrime(10**5))

sosuu = callIsPrime(10**5)

Q = int(input())
for _ in range(Q):
    l, r = map(int, input().split())
    count = 0
    for i in range(l, r+1, 2):
        # print(i)
        if i in sosuu and (i+1)//2 in sosuu:
            count += 1
    print(count)

Fixed submission:
import math

# 素数判定関数
def isPrime(num):
    # 2未満の数字は素数ではない
    if num < 2:
        return False
    # 2は素数
    elif num == 2:
        return True
    # 偶数は素数ではない
    elif num % 2 == 0:
        return False

    # 3 ~ numまでループし、途中で割り切れる数があるか検索
    # 途中で割り切れる場合は素数ではない
    for i in range(3, math.floor(math.sqrt(num)) + 1, 2):
        if num % i == 0:
            return False

    # 素数
    return True

# 素数判定
def callIsPrime(input_num=1000):
    numbers = set()
    # ループしながら素数を検索する
    for i in range(1, input_num):
        if isPrime(i):
            numbers.add(i)

    # 素数配列を返す
    return numbers

# 関数の呼び出し
# print(callIsPrime(10**5))

sosuu = callIsPrime(10**5)
count_dic = {}
count = 0
for i in range(1, 10**5, 2):
    if i in sosuu and (i+1)//2 in sosuu:
        count += 1
    count_dic[i] = count
# print(count_dic)

Q = int(input())
for _ in range(Q):
    l, r = map(int, input().split())
    # if r == l:
    #     print(count_dic[r]-count_dic[l]+1)
    # else:
    print(count_dic[r] - count_dic[max(l-2, 1)])

Buggy python submission (verdict: Time Limit Exceeded):
import math

# 素数判定関数
def isPrime(num):
    # 2未満の数字は素数ではない
    if num < 2:
        return False
    # 2は素数
    elif num == 2:
        return True
    # 偶数は素数ではない
    elif num % 2 == 0:
        return False

    # 3 ~ numまでループし、途中で割り切れる数があるか検索
    # 途中で割り切れる場合は素数ではない
    for i in range(3, math.floor(math.sqrt(num)) + 1, 2):
        if num % i == 0:
            return False

    # 素数
    return True

# 素数判定
def callIsPrime(input_num=1000):
    numbers = []
    # ループしながら素数を検索する
    for i in range(1, input_num):
        if isPrime(i):
            numbers.append(i)

    # 素数配列を返す
    return numbers

# 関数の呼び出し
# print(callIsPrime(10**5))

sosuu = callIsPrime(10**5)

Q = int(input())
for _ in range(Q):
    l, r = map(int, input().split())
    count = 0
    for i in range(l, r+1, 2):
        # print(i)
        if i in sosuu and (i+1)//2 in sosuu:
            count += 1
    print(count)

Fixed submission:
import math

# 素数判定関数
def isPrime(num):
    # 2未満の数字は素数ではない
    if num < 2:
        return False
    # 2は素数
    elif num == 2:
        return True
    # 偶数は素数ではない
    elif num % 2 == 0:
        return False

    # 3 ~ numまでループし、途中で割り切れる数があるか検索
    # 途中で割り切れる場合は素数ではない
    for i in range(3, math.floor(math.sqrt(num)) + 1, 2):
        if num % i == 0:
            return False

    # 素数
    return True

# 素数判定
def callIsPrime(input_num=1000):
    numbers = set()
    # ループしながら素数を検索する
    for i in range(1, input_num):
        if isPrime(i):
            numbers.add(i)

    # 素数配列を返す
    return numbers

# 関数の呼び出し
# print(callIsPrime(10**5))

sosuu = callIsPrime(10**5)
count_dic = {}
count = 0
for i in range(1, 10**5, 2):
    if i in sosuu and (i+1)//2 in sosuu:
        count += 1
    count_dic[i] = count
# print(count_dic)

Q = int(input())
for _ in range(Q):
    l, r = map(int, input().split())
    # if r == l:
    #     print(count_dic[r]-count_dic[l]+1)
    # else:
    print(count_dic[r] - count_dic[max(l-2, 1)])