def number_of_not_divisible(a, b, myrange):
result = 0
least_common_multiple = a * b
while myrange % least_common_multiple != 0:
if myrange % a != 0 and myrange % b != 0:
result += 1
myrange -= 1
partial_result_inside_one_range = 0
for i in range(least_common_multiple):
if i % a != 0 and i % b != 0:
partial_result_inside_one_range += 1
result += partial_result_inside_one_range * (myrange / least_common_multiple)
print(result)
number_of_not_divisible (2, 3, 1000)
Вы можете сделать это проще и проще.Вы можете видеть, что в каждом интервале с размером наименьшего общего кратного двух чисел количество искомых элементов одинаково.Таким образом, вам просто нужно посчитать в первом интервале и умножить его, а после простого подсчета числа в диапазоне% наименьшего общего кратного.Я думаю, что это должно работать вообще, но скажите мне, если вы ошиблись.