#python #loops #math
#python #циклы #математика
Вопрос:
Итак, я написал код, в котором перечислены все числа, которые не делятся на 2 и 3. Теперь я хотел бы знать, сколько из этих чисел в rage 1000. Немного погуглив, я не нашел ничего, что могло бы помочь мне в моем случае.
Не могли бы вы, ребята, дать мне несколько советов? Был бы признателен!
for i in range(1, 1000):
if i%2 != 0 and i%3 != 0:
print(i)
Комментарии:
1. Поместите простое
count
и увеличьте insdie в блок if.2. @DirtyBit извините, но не могли бы вы объяснить? Я не понимаю, как работает count
Ответ №1:
Диапазон уже определен, поместите count
count = 0
for i in range(1, 1000):
if i%2 != 0 and i%3 != 0:
count = 1
print("The number is {}".format(i))
print("Count: {}".format(count))
ВЫВОД:
The number is 1
The number is 5
The number is 7
The number is 11
The number is 13
.
.
.
The number is 991
The number is 995
The number is 997
Count: 333
Редактировать:
однострочный
print("Count: {}".format(sum(1 for i in range(1000) if i%2 != 0 and i%3 != 0)))
Комментарии:
1. или напрямую:
sum(1 for i in range(n) if i%2 != 0 and i%3 != 0)
или дажеsum(1 for i in range(0, n, 2) if i%3 != 0))
.2. @hiroprotagonist Действительно, добавлен. Спасибо!
3. и математически это просто
(n-1 - n//2) (n-1 - n//3) - (n-1 - n//(2*3))
(можно было бы упростить, но я думаю, что в этой форме смысл понятнее)…
Ответ №2:
count=0
for i in range(1, 1000):
if i%2 != 0 and i%3 != 0:
count=count 1
print(i)
просто сделайте подсчет внутри блока IF
Ответ №3:
Существует 1000/2 = 500 чисел, делящихся на 2, и 1000/3 = 333, делящихся на 3. Среди них кратные 6 появляются дважды, и их 1000/6 = 165.
Следовательно 1000 — (500 333 — 166) = 333.
До миллиарда миллиардов вы бы имели 1,000,000,000,000,000,000 — (500,000,000,000,000,000 — 333,333,333,333,333,333 — 166,666,666,666,666,666) = 333,333,333,333,333,333 из них, что составляет всего треть.
Ответ №4:
Самое простое решение — поместить count
переменную в ваш цикл и увеличить ее.
count = 0
for i in range(1, 1000):
if i%2 != 0 and i%3 != 0:
count =1
print(i)
print(count)
Другим решением может быть:
count = len([x for x in range(1,1000) if x%2!=0 and x%3!=0])
Ответ №5:
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)
Вы можете сделать это проще и обобщеннее. Вы можете видеть, что в каждом интервале размером, наименьшим общим кратным двум числам, количество искомых элементов одинаково. Итак, вам просто нужно посчитать в первом интервале и умножить его, а после простого подсчета числа в диапазоне%наименьшего общего кратного. Я думаю, что это должно работать в общем случае, но скажите мне, если вы получите ошибку.
Комментарии:
1. Это быстрее при больших итерациях.