結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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))
0