Machen Sie auf einfache Weise eine Zahl von 7s und dividieren Sie durch K, um festzustellen, ob sie 0 wird. Da K kleiner als $ 10 ^ 6 $ ist, ordnen Sie 7 bis zu diesem Bereich an. Wenn Sie denken, dass 7s für $ 10 ^ 6 $ anstehen, dann natürlich TLE
K = int(input())
flg = False
for i in range(10 ** 6):
n = int('7' * (i + 1))
if n % K == 0:
flg = True
break
if flg:
print(len(str(n)))
else:
print(-1)
Es scheint, dass Sie etwas implementieren sollten, das rechenintensiv ist. Gewöhnliches Schreiben besteht darin, 0 zu viel zu addieren und die Berechnung fortzusetzen, bis sie teilbar ist (bis Sie Lust dazu haben), aber stattdessen 7 zu addieren. Zum Beispiel würde $ 10 \ div 8 $ normalerweise so aussehen:
10 \div 8 = 1 \,nicht wirklich\, 2 \\
20 \div 8 = 2 \,nicht wirklich\, 4 \\
40 \div 8 = 5 \,nicht wirklich\, 0 \\
Antworten: \,1.25
Dies geschieht wie folgt.
10 \div 8 = 1 \,nicht wirklich\, 2 \\
(20 + 7) \div 8 = 3 \,nicht wirklich\, 3 \\
(30 + 7) \div 8 = 4 \,nicht wirklich\, 5 \\
...
Wenn ich es in Python implementiere, sieht es so aus. (Wenn K = 101 im numerischen Beispiel) Es ist schnell, weil jede Berechnung zu viel ist. ~~ Wenn es $ 10 ^ 6 $ mal ist, ist es akzeptabel. ~~ (Ergänzung: Aus dem Kommentar geht hervor, dass K-mal ausreicht, da es unter K nur K Straßen geben kann. Danke!)
K = 101
cur = 7
for i in range(100):
mod = cur % K
print(f'{cur} % {K} = {mod}')
if mod == 0:
ans = i + 1
print(f'Answer: {ans}')
break
else:
cur = mod * 10 + 7
"""
(output)
7 % 101 = 7
77 % 101 = 77
777 % 101 = 70
707 % 101 = 0
Answer: 4
"""
Endlich AC unten
K = int(input())
cur = 7
flg = False
for i in range(10 ** 6):
mod = cur % K
if mod == 0:
ans = i + 1
flg = True
break
else:
cur = mod * 10 + 7
if flg:
print(ans)
else:
print(-1)