結果
| 問題 |
No.434 占い
|
| コンテスト | |
| ユーザー |
tktk_snsn
|
| 提出日時 | 2021-09-04 13:15:53 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 443 ms / 2,000 ms |
| コード長 | 1,441 bytes |
| コンパイル時間 | 290 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 16,768 KB |
| 最終ジャッジ日時 | 2024-12-17 22:14:00 |
| 合計ジャッジ時間 | 7,882 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 27 |
ソースコード
"""\
参考
https://yukicoder.me/submissions/438049
"""
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 7)
def euler_phi(N):
"""
Euler totient function
[1,N]の自然数のうちNと互いに素なものの個数
"""
res = N
for i in range(2, int(N ** 0.5) + 1):
if N % i == 0:
res -= res // i
while N % i == 0:
N //= i
if N > 1:
res -= res // N
return res
def euler_phi_table(N):
res = list(range(N))
for i in range(2, N):
if res[i] == i:
for j in range(i, N, i):
res[j] = res[j] // i * (i - 1)
return res
U = 10 ** 5
fact = [1] * (U + 1)
fact_ord = [0] * (U + 1)
for n in range(1, U+1):
e = 0
m = n
while m % 3 == 0:
m //= 3
e += 1
fact[n] = fact[n-1] * m % 9
fact_ord[n] = fact_ord[n-1] + e
phi = euler_phi(9)
inv = [pow(x, phi - 1, 9) for x in fact]
def comb(n, k):
e = fact_ord[n] - fact_ord[k] - fact_ord[n-k]
if e >= 2:
return 0
res = fact[n] * inv[k] * inv[n-k]
if e == 1:
return res * 3 % 9
return res % 9
T = int(input())
for _ in range(T):
S = input().rstrip()
if all(s == "0" for s in S):
print(0)
continue
res = 0
n = len(S) - 1
for i, s in enumerate(S):
res += int(s) * comb(n, i)
res %= 9
if res == 0:
res = 9
print(res)
tktk_snsn