25.01 Делители числа
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [88535;167042], числа, имеющие ровно 5 различных чётных натуральных делителей. Программа должна вывести количество таких чисел и их целую часть среднего арифметического.
def divs(x): # функция возврающая список делителей числа d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d.add(i) d.add(x//i) return sorted(d) ans = [] for x in range(88535,167043): d = [i for i in divs(x) if i % 2 == 0] # список, в котором хранятся только чётные делители числа if len(d) == 5: ans += [x] print(len(ans),sum(ans)//len(ans))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа,
имеющие четыре различных натуральных делителя, не считая единицы и самого себя. Найдите количество таких
чисел.
def count_divs(n): # функция для подсчёта делителей числа counter = 0 for i in range(2, int(n**0.5)+1): if n % i == 0: counter += 1 if i != n//i: counter += 1 if counter > 4: # для оптимизации выходим из функции если кол-во делителей больше 4 return 0 return counter ans = 0 for i in range(856789, 1561023+1): temp = count_divs(i) if temp == 4: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку ,
числа, имеющие ровно
различных натуральных делителя. Выведите такие числа через пробел, в порядке
возрастания.
def three_del(n): # функция для проверки ровно ли 3 делителя у числа count = 0 for j in range(1, int(n ** 0.5) + 1): if n % j == 0: count += 2 if j == n // j: count -= 1 return count == 3 for i in range(123123, 143123 + 1): if three_del(i): print(i)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа,
имеющие ровно
различных нечётных натуральных делителей. Выведите такие числа через пробел, в порядке
возрастания.
def divisors(n): # функция для подсчёта нечётных делителя у числа count = 0 for j in range(1, int(n ** 0.5) + 1): if n % j == 0: if j % 2 == 1: count += 1 if (n // j) % 2 == 1 and n // j != j: count += 1 return count for i in range(196285, 396175 + 1): if divisors(i) == 7: print(i)
Ошибка.
Попробуйте повторить позже
Пусть — сумма минимального и максимального натурального делителей целого числа, не считая единицы и самого
числа. Если таких делителей нет, то считаем значение
равным нулю.
Напишите программу, которая перебирает целые числа, большие , в порядке возрастания и ищет среди них
такие, для которых значение
при делении на
дает в остатке
. Вывести первые
найденных чисел через
пробел.
def m(n): # функция для подсчёта суммы минимального и максимального делителей for x in range(2, int(n ** 0.5) + 1): if n % x == 0 and x != n // x: return x + n // x return 0 k = 0 for i in range(425162, 10000000000): if m(i) % 7 == 3: # если остаток суммы при делении на 7 равен 3 print(i) k += 1 if k == 5: break
Ошибка.
Попробуйте повторить позже
Найти количество чисел из промежутка , у которых ровно
натуральных делителей.
k = 2 # 1 и само число - делители числа всегда
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
k += 1
if n // i != i:
k += 1
return k
counter = 0
for i in range(421431, 754124):
if count_div(i) == 12:
counter += 1
print(counter)
Ошибка.
Попробуйте повторить позже
Найти на промежутке числа, у которых ровно 2 различных нетривиальных делителя. Найдите наибольшие 5
подходящих чисел и минимальный нетривиальный делитель каждого числа. В ответ запишите найденные 5 чисел в
порядке убывания и делитель каждого из чисел в таком порядке:
Число1, Дел1; Число2, Дел2; и т.д. (После каждой запятой или точки с запятой ставится пробел, каждая группа (число и его минимальный делитель) отделяется от следующей группы точкой с запятой, после последней группы никакой знак не ставится).
def divs(x): # функция возврающая список делителей числа d = set() for i in range(2,int(x**0.5)+1): if x % i == 0: d.add(i) d.add(x//i) if len(d) > 2: # для оптимизации возращаем список делителей если кол-во делителей больше 2 return sorted(d) return sorted(d) count = 0 for x in range(99999,21321,-1): # для оптимизации начинаем перебор с большего к меньшему d = divs(x) if len(d) == 2: print(x,d[0]) # вывод ответа count += 1 if count == 5: break
Ошибка.
Попробуйте повторить позже
Найти первые 5 чисел, больших , которые имеют ровно 5 делителей. Запишите в ответ найденные числа в порядке
возрастания через пробел.
Обычное решение
def count_div(n): # функция для подсчёта количества делителей k = 2 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: k += 1 if n // i != i: k += 1 if k > 5: # для оптимизации выходим из функции если кол-во делителей больше 5 return 0 return k counter = 0 for i in range(35799, 1000000000000): if count_div(i) == 5: counter += 1 print(i, end=’ ’) if counter == 5: break
Решение на основе ОТА
def is_prime(n): # функция для проверки, что число - простое for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return n > 1 counter = 0 for i in range(1000): if is_prime(i) and i ** 4 > 35798 and counter < 5: print(i ** 4) counter += 1
Ошибка.
Попробуйте повторить позже
Найти число из промежутка , которое имеет больше всего делителей. Если таких чисел несколько, выберите
наибольшее из них. В ответе через пробел запишите найденное число и его количество делителей.
def count_div(n): # функция для подсчёта количества делителей k = 2 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: k += 1 if n // i != i: k += 1 return k maxim, ans = 0, 0 for i in range(41689, 142986): x = count_div(i) if x >= maxim: #нестрогий знак для того чтобы вывести максимальное(последнее) число maxim = x ans = i print(ans, maxim)
Ошибка.
Попробуйте повторить позже
Найти на промежутке числа, у которых есть хотя бы
простых делителя, оканчивающихся на
. В
ответе через пробел запишите количество найденных чисел и максимальное число делителей среди найденных
чисел.
def prime(x): # функция, которая проверяет является ли число простым if x == 1:return False for i in range(2,int(x**0.5)+1): if x % i == 0: return False return True def divs(x): # функция возврающая список делителей числа d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d.add(i) d.add(x//i) return sorted(d) count = 0 mx = 0 for x in range(654321,712346): d = [i for i in divs(x) if prime(i) and i % 10 == 7] # список, в котором хранятся простые делители числа, оканчивающиеся на 7 divisors = divs(x) if len(d) >= 2: # если таких делителей хотя бы 2 count += 1 # увеличиваем счётчик mx = max(mx,len(divisors)) #обновляем максимальное кол-во делителей числа print(count,mx)
Ошибка.
Попробуйте повторить позже
Найти на промежутке числа, у которых все нетривиальные делители — простые или отсутствуют. В ответе
через пробел запишите количество подходящих чисел и максимальное из них через пробел.
if n == 1: return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def okay(n): # Все ли нетривиальные делители числа простые?
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
if not prime(i): # Если встретили непростой делитель,
return False # то число не подходит
if n // i != i:
if not prime(n // i):
return False
return True
counter, maxim = 0, 0
for i in range(12524, 15422):
if okay(i):
counter += 1
if i > maxim:
maxim = i
print(counter, maxim)
Ошибка.
Попробуйте повторить позже
Найти числа из промежутка , у которых есть ровно 3 натуральных делителя, которые делятся на 17. В
ответе запишите эти числа и три минимальных делителя каждого числа (делители должны идти по возрастанию). Ответ
запишите в формате:
Число1, Дел1, Дел2, Дел3; Число2, Дел1, Дел2, Дел3; и т.д. (После каждой запятой или точки с запятой ставится пробел, каждая группа (число и его три минимальных делителя) отделяется от следующей группы точкой с запятой, после последней группы никакой знак не ставится).
def divs(x): # функция возврающая список делителей числа d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d.add(i) d.add(x//i) return sorted(d) for x in range(750000,930001): divisors = divs(x) d = [i for i in divisors if i % 17 == 0] # список, в котором хранятся только делители числа кратные 17 if len(d) == 3: # если таких делителей ровно 3 print(x,divisors[:3]) # вывод числа и 3 его минимальных делителей
Ошибка.
Попробуйте повторить позже
Назовем число интересным, если количество его делителей делится нацело на 2 и на 3. Найти на промежутке
количество интересных чисел и их сумму. Запишите ответ через пробел.
def count_div(n): # функция для подсчёта количества делителей числа k = 2 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: k += 1 if n // i != i: k += 1 return k counter, summ = 0, 0 for i in range(8214, 342142): if count_div(i) % 2 == 0 and count_div(i) % 3 == 0: # проверка по условию counter += 1 summ += i print(counter, summ)
Ошибка.
Попробуйте повторить позже
Назовем число красивым, если оно делится на сумму своих цифр и имеет ровно 6 нетривиальных делителей. Найти на
промежутке количество красивых чисел и их среднее арифметическое. В ответе запишите два числа через
пробел: сначала количество чисел, потом целую часть их среднего арифметического.
def sum_digits(n): # сумма цифр s = 0 while n > 0: s += n % 10 n //= 10 return s def count_div(n): # функция для подсчёта количества делителей k = 0 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: k += 1 if n // i != i: k += 1 return k counter, summ = 0, 0 for i in range(51242, 421422): if i % sum_digits(i) == 0 and count_div(i) == 6: # проверка по условию counter += 1 summ += i print(counter, int(summ / counter))
Ошибка.
Попробуйте повторить позже
Найти наибольшее число, меньшее , которое имеет более 70 нетривиальных делителей. В ответ запишите это число
и количество его нетривиальных делителей. Запишите числа через пробел.
def count_div(n): # функция для подсчёта количества делителей числа k = 0 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: k += 1 if n // i != i: k += 1 return k for i in range(100000, 0, -1): if count_div(i) > 70: print(i, count_div(i)) break
Ошибка.
Попробуйте повторить позже
Найти на промежутке [123123; 321321] числа, которые нацело делятся на целую часть среднего арифметического своих делителей. В ответе через пробел запишите количество таких чисел и их произведение.
k, s = 0, 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
k += 1
s += i
if n // i != i:
k += 1
s += n // i
if n % int(s / k) == 0:
return True
return False
counter, p = 0, 1
for i in range(123123, 321322):
if average(i):
counter += 1
p *= i
print(counter, p)
Ошибка.
Попробуйте повторить позже
Назовем число добрым, если среди его делителей есть хотя бы три квадрата простых чисел. Найти 5 минимальных добрых
чисел, больших . В ответе запишите найденные числа через пробел в порядке возрастания.
def prime(n): # функция, которая проверяет является ли число простым if n == 1: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True def divs(x): # функция возврающая список делителей числа d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d.add(i) d.add(x//i) return sorted(d) count = 0 for x in range(21318,100000): d = [i for i in divs(x) if int(i**0.5) == i**0.5 and prime(i**0.5)] # список, в котором хранятся только квадраты простых делителей числа if len(d) >= 3: print(x) count += 1 if count == 5: break
Ошибка.
Попробуйте повторить позже
Найти минимальное число, большее , которое имеет ровно
делителей, из которых ровно
– простые. В ответе
через пробел запишите все простые делители найденного числа в порядке возрастания.
def prime(n): # функция, которая проверяет является ли число простым if n == 1: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True def divs(x): # функция возврающая список делителей числа d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d.add(i) d.add(x//i) return sorted(d) for x in range(156239,500000): divisors = divs(x) # список всех делителей текущего числа prime_divisors = [i for i in divisors if prime(i)] # список, в котором хранятся только простые делители числа if len(divisors) == 60 and len(prime_divisors) == 4: # проверка по условию print(prime_divisors) break
Ошибка.
Попробуйте повторить позже
Определите количество составных натуральных чисел из диапазона , у которых количество нетривиальных
делителей не менее трех.
Примечание. Нетривиальный делитель — делитель, не равный единице и самому числу.
ans = 0 for i in range(3, 30000 + 1): dels = 0 for j in range(2, int(i ** 0.5) + 1): # перебор возможных нетривиальных делителей if i % j == 0: dels += 1 if j != i // j: dels += 1 if dels >= 3: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Число называется избыточным, если оно строго меньше суммы своих собственных делителей (то есть всех положительных делителей, отличных от самого числа). Определите количество избыточных чисел из диапазона [5; 50000].
ans = 0 for i in range(5, 50000+1): dels = [1] # список, в котором будут храниться делители числа, отличные от самого числа for j in range(2, int(i**0.5)+1): if i % j == 0: dels += [j] if j != i//j: dels += [i//j] if sum(dels) > i: ans += 1 print(ans)