結果
| 問題 | No.8082 幸せな家族と除け者たち (体験版) |
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2026-04-13 06:01:29 |
| 言語 | Python3 (3.14.3 + numpy 2.4.4 + scipy 1.17.1) |
| 結果 |
AC
|
| 実行時間 | 156 ms / 2,000 ms |
| コード長 | 2,431 bytes |
| 記録 | |
| コンパイル時間 | 635 ms |
| コンパイル使用メモリ | 20,828 KB |
| 実行使用メモリ | 15,448 KB |
| 最終ジャッジ日時 | 2026-04-13 06:01:32 |
| 合計ジャッジ時間 | 2,230 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
from collections import Counter
#X=int(input())
# x以下の素数の列挙,素因数分解,約数の列挙
#x=10**7
import math
#L=math.floor(math.sqrt(x)) # 平方根を求める
#Primelist=[i for i in range(x+1)]
#Primelist[1]=0 # 1は素数でないので0にする.
#for i in Primelist:
# if i>L:
# break
# if i==0:
# continue
# for j in range(2*i,x+1,i):
# Primelist[j]=0
#Primes=[Primelist[j] for j in range(x+1) if Primelist[j]!=0]
#D=Counter()
#ind=0
#while X>1:
# print(X)
# a=Primes[ind]
# while X%a==0:
# D[a]+=1
# X//=a
# print(X,a)
# ind+=1
#print(D)
D=Counter({151: 21, 277: 21, 293: 21, 367: 21, 13: 20, 167: 20, 281: 20, 307: 20, 313: 20, 379: 20, 41: 19, 149: 19, 163: 19, 193: 19, 257: 19, 457: 19, 29: 18, 173: 18, 211: 18, 233: 18, 349: 18, 229: 16, 283: 16, 347: 16, 83: 15, 89: 15, 271: 15, 353: 15, 389: 15, 439: 15, 443: 15, 3: 14, 11: 14, 181: 14, 241: 13, 59: 12, 61: 12, 97: 12, 131: 12, 137: 12, 419: 12, 421: 12, 449: 12, 7: 9, 37: 9, 103: 9, 179: 9, 239: 9, 317: 8, 19: 7, 191: 7, 79: 6, 107: 6, 109: 6, 397: 6, 433: 6, 17: 5, 23: 5, 67: 5, 223: 5, 251: 5, 331: 5, 71: 4, 359: 4, 47: 3, 373: 3, 157: 2, 2: 1, 53: 1, 127: 1, 199: 1, 409: 1})
X=list(D)
C=[]
for x in sorted(X):
C.append(D[x])
C=[1, 14, 9, 14, 20, 5, 7, 5, 18, 9, 19, 3, 1, 12, 12, 5, 4, 6, 15, 15, 12, 9, 6, 6, 1, 12, 12, 19, 21, 2, 19, 20, 18, 9, 14, 7, 19, 1, 18, 5, 16, 18, 9, 13, 5, 19, 15, 21, 20, 16, 21, 20, 20, 8, 5, 16, 18, 15, 4, 21, 3, 20, 15, 6, 1, 12, 12, 6, 15, 15, 12, 19]
ANS=""
for c in C:
ANS+=chr(c+96)
#print("".join(ANS))
# an integer is called fool iff all substrings are primes output the product of all fools
def calc_prime(x):
if x==1:
return False
for i in range(2,round(x**(1/2))+1):
if 1<i<x and x%i==0:
return False
return True
def calc(x):
S=str(x)
for i in range(len(S)+1):
for j in range(i+1,len(S)+1):
T=S[i:j]
if len(T)==0:
continue
xx=int(T)
if calc_prime(xx)==False:
return False
return True
Q=[1,2,3,4,5,6,7,8,9]
ANS=[]
while Q:
x=Q.pop()
#print(x)
if calc(x)==True:
ANS.append(x)
for w in [1,2,3,4,5,6,7,8,9]:
v=str(x)+str(w)
Q.append(int(v))
LA=1
for ans in set(ANS):
LA*=ans
print(LA)
titia