提出 #41043156


ソースコード 拡げる

#!/usr/bin/env python3
import math
import sys


sys.setrecursionlimit(10**8)

class UnionFind():
    def __init__(self, n):
        self.n = n
        self.parents = [-1] * n

    def find(self, x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x] = self.find(self.parents[x])
            return self.parents[x]

    def union(self, x, y):
        x = self.find(x)
        y = self.find(y)

        if x == y:
            return

        if self.parents[x] > self.parents[y]:
            x, y = y, x

        self.parents[x] += self.parents[y]
        self.parents[y] = x

    def size(self, x):
        return -self.parents[self.find(x)]

    def same(self, x, y):
        return self.find(x) == self.find(y)

    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i) == root]

    def roots(self):
        return [i for i, x in enumerate(self.parents) if x < 0]

    def group_count(self):
        return len(self.roots())

    def all_group_members(self):
        group_members = defaultdict(list)
        for member in range(self.n):
            group_members[self.find(member)].append(member)
        return group_members

def isprime(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0: return False
    return True

def factorization(n):
    arr = []
    temp = n
    for i in range(2, int(-(-n**0.5//1))+1):
        if temp%i==0:
            cnt=0
            while temp%i==0:
                cnt+=1
                temp //= i
            arr.append([i, cnt])

    if temp!=1:
        arr.append([temp, 1])

    if arr==[]:
        arr.append([n, 1])

    return arr

def sieve_of_eratosthenes(x):
    nums = [i for i in range(x+1)]

    root = int(pow(x,0.5))
    for i in range(2,root + 1):
        if nums[i] != 0:
            for j in range(i, x+1):
                if i*j >= x+1:
                    break
                nums[i*j] = 0

    primes = sorted(list(set(nums)))[2:]

    return primes



def solve(N: int):
    primes = sieve_of_eratosthenes(300000)
    ans = 0
    for i in range(len(primes)) :
        a = primes[i]
        if(a ** 2 * 75 > N) : break
        for j in range(i+1,len(primes)) :
            b = primes[j]
            if(a**2 * b * 25 > N) : break
            
            l = j
            r = len(primes)
            while(r-l > 1) :
                mid = (l+r) // 2
                if(primes[mid]**2 <= N / (a**2 * b)) : l = mid
                else : r = mid
            ans += l-j
    print(ans)
    return


def main():
    def iterate_tokens():
        for line in sys.stdin:
            for word in line.split():
                yield word
    tokens = iterate_tokens()
    N = int(next(tokens))  # type: int
    solve(N)

if __name__ == '__main__':
    main()

提出情報

提出日時
問題 D - AABCC
ユーザ jmwjmw
言語 PyPy3 (7.3.0)
得点 400
コード長 3075 Byte
結果 AC
実行時間 900 ms
メモリ 111584 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 2
AC × 17
セット名 テストケース
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt
ケース名 結果 実行時間 メモリ
sample_01.txt AC 353 ms 111584 KiB
sample_02.txt AC 259 ms 99348 KiB
test_01.txt AC 76 ms 92832 KiB
test_02.txt AC 77 ms 95688 KiB
test_03.txt AC 93 ms 99288 KiB
test_04.txt AC 256 ms 99416 KiB
test_05.txt AC 257 ms 99432 KiB
test_06.txt AC 115 ms 99632 KiB
test_07.txt AC 892 ms 99208 KiB
test_08.txt AC 84 ms 99172 KiB
test_09.txt AC 255 ms 99368 KiB
test_10.txt AC 238 ms 99432 KiB
test_11.txt AC 122 ms 99364 KiB
test_12.txt AC 651 ms 99368 KiB
test_13.txt AC 177 ms 99404 KiB
test_14.txt AC 749 ms 99316 KiB
test_15.txt AC 900 ms 99180 KiB