結果
問題 |
No.719 Coprime
|
ユーザー |
![]() |
提出日時 | 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))