#時間切れコード
Python
1from math import gcd 2from itertools import product 3 4K = int(input()) 5 6ans = 0 7for x in list(product(range(1, K + 1), repeat = 3)): 8 ans += gcd(gcd(x[0], x[1]), x[2]) 9 10print(ans)
#正解コード
Python
1from math import gcd 2from itertools import product 3 4K = int(input()) 5 6ans = 0 7for i in range(1, K + 1): 8 for j in range(1, K + 1): 9 for k in range(1, K + 1): 10 ans += gcd(gcd(i, j), k) 11 12print(ans)
#質問
よくitertools.productは「多重ループを回避する」などと謳われているのを目にしてきましたが、このような場合どうしてfor文を用いた三重ループの方が計算量が小さく済んだのでしょうか?(実際は同じことをやっているようにしか見えないのですが…) また、このケースだけでなく一般に多重ループをitertools.productを用いるよりfor文で愚直に書いた方が計算処理が少なく済むのだとしたら、itertools.productを使う旨味とは一体何なのでしょうか?(コードの見やすさというのは当然あると思いますが) 曖昧かつ漠然とした疑問ゆえ上手く得たい情報に行きつけず、素人質問にて恐縮ですが、簡単にご教授頂きたく存じます。よろしくお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。