AtCoder ABC 162の復習

さてさて、毎度おなじみになってきました。
Cまで完答できるかな??



A

入力を文字列にみたてて1桁ずつ確認しました

N = input()
J = "No"
for i in N:
  if i == "7":
    J = "Yes"
    break
print(J)

B

難しく考えず、1から順番に3と5で割れるかを確認して割れなければ足していく

N = int(input())
sum = 0

for i in range(1, N+1):
  print(i)
  if i % 3 == 0:
    pass
  elif i % 5 == 0:
    pass
  else:
    sum += i
print(sum) 

C

正直問われているところからあまりぴんとこず、おとなしく解説記事や他の方の回答を見てました
qiita.com


pythonは最小公倍数を出力できるmath.gcdがあるので使います。
また、3重ループしてgcdの中でgcdを使うと計算量的に重いので、2重ループの値を保持して使っています

import math

N = int(input())
sum = 0

for i in range(1, N+1):
  for j in range(1, N+1):
    p = math.gcd(i, j)
    for k in range(1, N+1):
      sum += math.gcd(p, k)
      
print(sum)
  

今回、C問題がわからず解説に頼ってしまいました
こいつは理解したぞ!

ではまた次回