Как найти кратные числа в диапазоне

$begingroup$

I recently found a ‘question’ that requires me to find the sum of all multiples of 3 and 5 under 1000, I sadly cheated and found some code online to help build a code in python:

sum=0
for i in range(999):
        if not(i %3 == 0) or not (i % 5):
                sum=sum+i
print sum

However, even though it works, I feel guilty that I had to cheat to answer this question. I do not understand what the if not means, and why I cannot use the regular if statement. Can someone please clear this up for me? Thanks waco001

P.S. In other languages like C, this:

int problem1()
{
    int sum=0;

    for(int i=0;i<1000;i++)
    {
        if(i%3 == 0 || i%5 == 0)
        {
            sum+=i ;
        }
    }

    return sum ;
}

Works perfectly?!?

Gerry Myerson's user avatar

Gerry Myerson

173k12 gold badges203 silver badges367 bronze badges

asked Apr 13, 2013 at 23:36

waco001's user avatar

$endgroup$

7

$begingroup$

You don’t need such a brute force calculation. You can do this by hand. First, some notation. Let
$$
M_3 = 3mathbb{Z} cap [1, 999] = { text{multiples of 3 between 1 and 999, inclusive} }
$$
This definition works for any $k in mathbb{Z}$. The quantity that you are looking for is
$$
S = sum_{n in M_3 cup M_5} n
$$

Which numbers are in $M_3 cup M_5$? Multiples of $3$ or $5$, of course, but you must be careful. Multiples of $15 = 3 cdot 5$ are multiples of both $3$ and $5$. In fact, $M_3 cap M_5 = M_{15}$, so
$$
begin{align}
S &= sum_{n in M_3} n + sum_{n in M_5} n – sum_{n in M_{15}} n \
end{align}
$$
I will show you how to calculate one of these sums. (The other two are strictly analogous.) Consider
$$
sum_{n in M_3} n = 3 + 6 + cdots + 996 + 999
$$
How many summands are there? $leftlfloor frac{999}{3} rightrfloor = leftlfloor 333 rightrfloor = 333$. Thus, by pairing terms à la Aryabhata (and famously young K.F. Gauss), you have
$$
sum_{n in M_3} n = frac{333(3 + 999)}{2} = 166,833.
$$

answered Apr 14, 2013 at 0:07

Sammy Black's user avatar

Sammy BlackSammy Black

21.4k3 gold badges32 silver badges50 bronze badges

$endgroup$

1

$begingroup$

This will do the job :

numberOfDivisors = (end / actualNumber) - ((start - 1 ) / actualNumber)

Note : start, end are inclusive.

answered Feb 10, 2015 at 16:59

Shubham A.'s user avatar

$endgroup$

$begingroup$

For a range $(n, m)$ both inclusive,number of multiples of a number $x$ can be
calculated as $x = (m-n+1)/(given number)$

Qwerty's user avatar

Qwerty

6,0753 gold badges23 silver badges57 bronze badges

answered Jun 29, 2016 at 15:01

PARVEEN's user avatar

$endgroup$

You must log in to answer this question.

Not the answer you’re looking for? Browse other questions tagged

.

В идеале они все, но что бы их можно было использовать по отдельности, ну или самое большое и самое маленькое.
Но там будут маленькие промежутки так что в 99% случаях там будет только одно кратное число, например 150 и все.
Это число в дальнейшем будет нужно для арифметических действий и сравнений его с другими числами.

Добавлено через 27 минут
Там получается вся эта конструкция будет пересчитываться например каждые 10 минут и следовательно диапазон для искомого кратного числа будет меняться и мне нужно будет каждый раз получать для расчетов это кратное число.

Например.
есть число X (оно известно) и Y (оно то же известно)
Эти числа X и Y будут так же входить в диапазон 100 – 200

и диапазон от 100 до 200

дальше в этом диапазоне ищется число кратное 50 это будет 150
дальше проверяется
if (X < 150 а Y>150)
{
действие
}

Добавлено через 5 минут
дальше в этом диапазоне ищется число кратное 50 это будет Z в данном примере = 150
дальше проверяется
if (X[i] < Z[i] && Y[i]>Z[i])
{
действие
}

Так же понадобиться при новом пересчете проверять выполнение данног условия на прошлом пересчете
Например:
if (X[i-1] < Z[i-1] && Y[i-1]>Z[i-1]) && (X[i] < Z[i] && Y[i]>Z[i])
{
действие
}

#python #python-3.x

Вопрос:

 a=10,b=20,c=3
 

например,мне нужна программа,чтобы найти, сколько кратных у c=3, которые находятся между a, b или b, a?
как сделать эту программу без использования цикла? в этом примере с этим вводом программа должна выдать нам вывод 3, потому что кратные 3 равны 12,15,18, а эти числа находятся между 10,20, поэтому 3 будет правильным.

Комментарии:

1. Пожалуйста, покажите свои собственные усилия и что в этом плохого. Что значит «между»? Являются ли границы всеобъемлющими или исключительными?

2. Вероятно, это можно было бы сделать без циклов, если бы вы его жестко закодировали. Но почему? Для этого вам понадобится как минимум 1 или 2 петли

3. Ты действительно хочешь учиться?

Ответ №1:

Вы можете взять частное от обоих чисел, разделенное на c, а затем вычесть их, чтобы получить число, кратное между ними

 
a=100
b=200
c=3

multiple1 = a//c
multiple2 = b//c

print(multiple2-multiple1)

# this is not required, just for confirming that above logic works
count = 0
for i in range(a,b):
    if(i%c == 0):
        count =1
print(count)


 

оба результата равны 33

Комментарии:

1. при таком решении верхняя граница исключается, а нижняя граница включается

2. я пробовал, это хорошо работает для 10,20,3,но когда я попробовал a,b, c=10,20,5, вместо вывода 3 это дает 2

3. Но между 10 и 20 у нас есть только 15 и 20, верно? Вы также хотели бы включить 10. Может быть, это то, что прокомментировал @mozway

4. мне нравится этот ответ, он такой умный, поскольку основан на чистой математической логике, такой чертовски умный.

Ответ №2:

используйте range , начиная с ближайшего верхнего (или равного) делителя:

 import math
len(range(math.ceil(a/c)*c, b, c)) # if the upper bound is inclusive, use b 1
 

вывод: 3 для a=10;b=20;c=3

nb. вы также можете напрямую получить номер, используя (b-math.ceil(a/c)*c)//c 1 (включая обе границы)

ПРИМЕЧАНИЕ. если вы не хотите использовать math модуль: (b (-a//c)*c)//c 1

Ответ №3:

Я написал код ниже:

 def count_multiples(a, b, c):
    count = 1 if min(a, b)%c == 0 else 0
    count  = abs(a//c - b//c)
    return count

print(count_multiples(30, 15, 2))
 

При этом учитываются как нижняя, так и верхняя границы.

Я протестировал его для ограниченного числа тестов, но он должен работать для любой комбинации чисел. Вы можете попробовать это и дать мне знать, если это сработает.

Ответ №4:

Для этого вам понадобится пакет «numpy». Если вы еще не установили его, откройте свой терминал и запустите «conda install numpy» или «pip install numpy».

Код:

 Import numpy as np 

a=10
b=20
c=3

x=np.arange(a,b,1) #it will create a list with integers [10,11,...,18,19]
                   # if you want to include/exclude 10,20 do  /- 1

count_multiples = list(map(lambda y: y %c, x)).count(0)
                 
                # y %c, will give the modulo. The modulo will be 0, if the integer is a multiple of c
                # .count(0), will count how many modulos are zero
                # with lambda you create a function, in this case y %c
                # map can be used instead of a loop and will check every element  of the list 
 

Ответ №5:

 a,b,c=10,20,5

def countmultiples(a,b,c):
    start = a-a%c

    multiples = list(range(start,b 1,c))
    sumofmultiples = len(multiples)

    if multiples[0]%c!=0 or multiples[0]<a:
        sumofmultiples-=1
        multiples.pop(0)

    return multiples,sumofmultiples

print(countmultiples(a,b,c)
 

поэтому мне нужно было найти кратные между a и b, также включенные в оба. таким образом,он идеально работает для каждого числа без циклов, рекурсивных и встроенных функций.

Описание задачи

Данная программа должна вывести все числа в заданном диапазоне, которые делились бы без остатка на определенное число.

Решение задачи

  1. На вход принимаются два числа, которые задают диапазон и записываются в разные переменные.
  2. Также принимается число, которое будет делителем.
  3. Используем цикл for, чтобы пройтись по всему диапазону и проверить все числа на кратность. Выводим только те числа, которые делятся на заданное число без остатка.
  4. Конец.

Исходный код

Ниже дан исходный код для вывода всех чисел из заданного диапазона, которые удовлетворяют условию делимости на данное число. Результаты работы программы также даны ниже.

lower = int(input("Введите нижнюю границу диапазона:"))
upper = int(input("Введите верхнюю границу диапазона:"))
n = int(input("Введите делитель:"))
for i in range(lower, upper + 1):
    if(i % n == 0):
        print(i)

Объяснение работы программы

  1. Пользователь вводит два числа, нижнюю и верхнюю границы. Они записываются в отдельные переменные.
  2. Далее пользователь вводит число, которое будет делителем. Оно также сохраняется в своей переменной.
  3. Значение переменной цикла for варьируется от нижней до верхней границы с шагом 1.
  4. В процессе работы цикла проверяется, равен ли остаток от деления нулю. Если остаток равен нулю, делимое выводится на экран.
  5. Конец.

Результаты работы программы

Пример 1:
Введите нижнюю границу диапазона:1
Введите верхнюю границу диапазона:50
Введите делитель:5
5
10
15
20
25
30
35
40
45
50
 
Пример 2:
Введите нижнюю границу диапазона:50
Введите верхнюю границу диапазона:100
Введите делитель:7
56
63
70
77
84
91
98

Просмотров 2.3к. Обновлено 15 октября 2021

В диапазоне натуральных чисел от 2 до 99 определить, сколько из них кратны любому из чисел в диапазоне от 2 до 9.

Необходимо проверить кратность каждого числа сначала числу 2, потом 3 и т.д. до 9 включительно. Введем массив с восьмью ячейками. В первую будем записывать количество чисел кратных 2, во вторую — 3 и т.д.

  1. Записать в ячейки массива нули.
  2. Перебирая числа от 2 до 99,
    1. для каждого из них в цикле от 2 до 9
      1. проверять кратность числа внешнего цикла числу внутреннего.
      2. Если второе число делит нацело первое, значит увеличивать на 1 значение в соответствующей ячейке массива.
  3. Вывести индексы и соответствующие им значения из массива.

Pascal

найти количество кратных чисел паскаль


var
a: array[2..9] of byte;
i,j: byte;
begin
for i:=2 to 9 do a[i] := 0;
for i:=2 to 99 do
for j:=2 to 9 do
if i mod j = 0 then
a[j] := a[j] + 1;
for i:=2 to 9 do
writeln(i,' - ', a[i]);
end



2 - 49
3 - 33
4 - 24
5 - 19
6 - 16
7 - 14
8 - 12
9 - 11

Язык Си


#include
main() {
int a[8], i, j;
for (i=0; i<9; i++) a[i] = 0;
for (i=2; i<100; i++)
for (j=2; j<10; j++)
if (i%j == 0) a[j-2] += 1;
for (i=0; i<8; i++)
printf("%d - %dn", i+2, a[i]);
}

Python

найти количество кратных чисел Python


a = [0]*8
for i in range(2,100):
for j in range(2,10):
if i%j == 0:
a[j-2] += 1
i = 0
while i < len(a):
print(i+2, ' - ', a[i])
i += 1



2 - 49
3 - 33
4 - 24
5 - 19
6 - 16
7 - 14
8 - 12
9 - 11

КуМир


алг кратность
нач
цел таб a[2:9]
цел j,i
нц для i от 2 до 9
a[i] := 0
кц
нц для j от 2 до 99
нц для i от 2 до 9
если mod(j,i) = 0 то a[i]:=a[i]+1 все
кц
кц
нц для i от 2 до 9
вывод i, " - ", a[i], нс
кц
кон

Basic-256


dim a(8)
for i=2 to 99
for j=2 to 9
if i%j = 0 then
a[j-2] = a[j-2] + 1
endif
next j
next i

for i=0 to 7
print (i+2) + " - " + a[i]
next i

Добавить комментарий