Как я могу посчитать числа в заданном диапазоне?

#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. Это быстрее при больших итерациях.