結果
| 問題 |
No.719 Coprime
|
| コンテスト | |
| ユーザー |
_polarbear08
|
| 提出日時 | 2018-07-28 00:20:21 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,630 bytes |
| コンパイル時間 | 105 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 43,896 KB |
| 最終ジャッジ日時 | 2024-07-05 17:21:42 |
| 合計ジャッジ時間 | 33,047 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 61 |
ソースコード
import math
import numpy as np
def make_prime_list(lower:int, upper:int) -> list:
# バリデーション
if lower < 0:
raise ValueError("lowerは0以上でなければいけません。(lower:{})".format(lower))
elif upper <= lower:
raise ValueError("upperはlowerより大きい数でなければいけません。\
(lower:{}, upper:{})".format(lower,upper))
isPrime = [True]*upper
primeList = []
# 区間内の数字が0,1のみならここで終了
if upper <= 2:
return primeList
# 区間内の数字に2以上のものがあるとき
isPrime[0] = False
isPrime[1] = False
# エラトステネスの篩の処理
for n in range(2,int(math.sqrt(upper))+2):
if isPrime[n]:
res=2*n
while res<upper:
isPrime[res] = False
res += n
# 区間内の素数を抽出
for n in range(lower,upper):
if isPrime[n]:
primeList.append(n)
return primeList
def getNearestValue(list, num):
# リスト要素と対象値の差分を計算し最小値のインデックスを取得
idx = np.abs(np.asarray(list) - num).argmin()
return list[idx]
N = 48
primeList = make_prime_list(2,N+1)
aa = getNearestValue(primeList, int(math.sqrt(N)+1))
bb = getNearestValue(primeList, int(math.sqrt(N)))
ans_list = []
for p in primeList:
res = p
while res*p <= N:
res = res*p
ans_list.append(res)
if aa*bb <= N:
print(sum(ans_list) - aa-bb+ aa*bb)
else:
print(sum(ans_list))
_polarbear08