提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |