結果
問題 |
No.854 公平なりんご分配
|
ユーザー |
|
提出日時 | 2020-05-10 11:06:28 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,421 bytes |
コンパイル時間 | 243 ms |
コンパイル使用メモリ | 82,116 KB |
実行使用メモリ | 464,444 KB |
最終ジャッジ日時 | 2024-07-07 10:35:16 |
合計ジャッジ時間 | 29,069 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 WA * 17 TLE * 1 MLE * 13 -- * 41 |
ソースコード
MOD = 10 ** 9 + 7 INF = 10 ** 11 from collections import defaultdict used_primes = set() def sieve(n): if n == 1:return [] primes = [1 if i%2 == 1 else 0 for i in range(n + 1)] primes[1] = 0 primes[2] = 1 for i in range(3,n + 1,2): if i * i > n: break if primes[i]: for j in range(i * i,n + 1,i): primes[j] = 0 return [p for p in range(2,n + 1) if primes[p] == 1] def factorization(n,primes): factor = defaultdict(int) for p in primes: while n%p == 0: n //= p factor[p] += 1 if n != 1: factor[n] = 1 used_primes.add(n) return factor def main(): N = int(input()) primes = sieve(60) A = list(map(int,input().split())) A = [defaultdict(int)] + [factorization(a,primes) for a in A] for i in range(N): for p in primes: A[i + 1][p] += A[i][p] for p in used_primes: A[i + 1][p] += A[i][p] Q = int(input()) for _ in range(Q): M,l,r = map(int,input().split()) for p in primes: divisor = A[r][p] - A[l - 1][p] while M%p == 0 and divisor > 0: M //= p divisor -= 1 if M%p == 0: break if M > 1: print('NO') else: print('Yes') if __name__ == '__main__': main()