結果

問題 No.8087 幸せな家族と除け者たち
ユーザー fura
提出日時 2023-09-13 18:12:19
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 34 ms / 2,000 ms
コード長 2,382 bytes
コンパイル時間 200 ms
コンパイル使用メモリ 12,672 KB
実行使用メモリ 10,496 KB
最終ジャッジ日時 2024-07-01 02:50:28
合計ジャッジ時間 602 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 1
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

def is_prime(n: int) -> bool:
for i in range(2, n):
if n % i == 0:
return False
return True
def prime_factorize(n: int) -> list[tuple[int, int]]:
res = []
p = 1
while n > 1:
p += 1
if not is_prime(p):
continue
e = 0
while n % p == 0:
e += 1
n //= p
res.append((p, e))
return res
def pretty(pf: list[tuple[int, int]]) -> str:
return ' '.join(str(e) for p, e in pf)
# https://oeis.org/A001228
O = [7920, 95040, 175560, 443520, 604800, 10200960, 44352000, 50232960, 244823040, 898128000, 4030387200, 145926144000, 448345497600, 460815505920,
    495766656000, 42305421312000, 64561751654400, 273030912000000, 51765179004000000, 90745943887872000, 4089470473293004800, 4157776806543360000,
    86775571046077562880, 1255205709190661721292800, 4154781481226426191177580544000000, 808017424794512875886459904961710757005754368000000000]
assert len(O) == 26
x = 43353648524232429046861770041745536445082776678114922236076365090976136738988298888513958220384075069759582971406858782013780657302073903191405084
    8405080498961121956355636199276360499200000000000000000000000000000000000000000000
# print(f'x : {pretty(prime_factorize(x))}')
# for i in range(26):
# print(f'{chr(ord("A") + i)} : {pretty(prime_factorize(O[i]))}')
# x : 205 96 44 26 14 5 3 9 6 1 7 1 1 0 2 0 1 0 1 1
# A : 4 2 1 0 1
# B : 6 3 1 0 1
# C : 3 1 1 1 1 0 0 1
# D : 7 2 1 1 1
# E : 7 3 2 1
# F : 7 2 1 1 1 0 0 0 1
# G : 9 2 3 1 1
# H : 7 5 1 0 0 0 1 1
# I : 10 3 1 1 1 0 0 0 1
# J : 7 6 3 1 1
# K : 10 3 2 3 0 0 1
# L : 14 3 3 1 0 1 0 0 0 1
# M : 13 7 2 1 1 1
# N : 9 4 1 3 1 0 0 1 0 0 1
# O : 10 7 3 1 1 0 0 0 1
# P : 18 6 3 1 1 0 0 0 1
# Q : 17 9 2 1 1 1
# R : 14 6 6 1 1 0 0 1
# S : 8 7 6 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1
# T : 15 10 3 2 0 1 0 1 0 0 1
# U : 18 13 2 1 1 1 1 0 1
# V : 21 9 4 2 1 1 0 0 1
# W : 21 3 1 1 3 0 0 0 1 1 1 1 0 1
# X : 21 16 2 3 1 1 1 0 1 1
# Y : 41 13 6 2 1 1 1 1 1 0 1 0 0 0 1
# Z : 46 20 9 6 2 3 1 1 1 1 1 0 1 0 1 0 1 0 0 1
C = ['Z', 'Y', 'S', 'T', 'N', 'N', 'N', 'O', 'O', 'I', 'I', 'C', 'H', 'R', 'A']
for c in C:
i = ord(c) - ord('A')
assert x % O[i] == 0, i
x //= O[i]
assert x == 1
print('synchronization')
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0