任意の数までの中に存在する素数を表示するプログラムを書きました。
処理にかかった時間も表示するようにしてみました。
python
1# coding=utf-8 2from time import time 3 4num = int(input('Enter the integer: ')) 5prime = [] 6 7if __name__ == '__main__': 8 st = time() 9 for i in range(2,num+1): 10 isprime = True 11 for j in prime: 12 if i % j == 0: 13 isprime = False 14 break 15 if isprime: 16 prime.append(i) 17 18 print(prime) 19 print('{0} sec'.format(time() - st)) 20
100を入力した場合の結果
c:\python>python prime.py Enter the integer: 100 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 0.00200009346008 sec
PCの性能があまりよくないので1000000などの大きな数字を入力すると、処理にとても長い時間がかかってしまいます。
そこでPythonの並列処理のための外部モジュールであるjoblibを使用してより高速に処理しようと思いました。
python
1# coding=utf-8 2 3from sklearn.externals.joblib import Parallel, delayed 4from time import time 5 6num = int(raw_input('Enter the integer: ')) 7st = time() 8array = [] 9prime = [2,] 10def makeprime(num): 11 isprime = True 12 for j in prime: 13 if num % j == 0: 14 isprime = False 15 break 16 if isprime: 17 prime.append(num) 18 return num 19 20if __name__ == ' __main__': 21 array = Parallel(n_jobs=-1)( [delayed(makeprime)(i) for i in range(3,num)] ) 22 23print(array) 24print('{0} sec'.format(time() - st)) 25
すると結果は
c:\python>prime2.py Enter the integer: 100 [] 0.000999927520752 sec
このようになってしまいました。
調べたり試行錯誤したり、僕にできることはすべてやったつもりなのですがうまくいきません。
よろしければ何が悪かったのかご教授していただきたいです。
こちらは私がjoblibについて質問させていただいたものです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 07:43