25.01 Делители числа
Ошибка.
Попробуйте повторить позже
Среди целых чисел, принадлежащих числовому отрезку [173225; 217437], найдите числа, которые представляют собой произведение двух различных простых делителей, заканчивающихся на одну и ту же цифру. Запишите в ответе количество таких чисел и минимальное из них без разделителей.
def simple(x):# Функция,которая проверяет является число простым или нет return x > 1 and all(x % y for y in range(2,int(x**0.5)+1)) def divs(x):# Функция,которая возвращает делители определённого числа d = set() for i in range(2,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) ans = [] for x in range(173225,217438): d = [i for i in divs(x) if simple(i)] #В списке d будут храниться делители числа x,которые при этом являются простыми числами if len(d) == 2 and (d[0] % 10 == d[1] % 10) and d[0]*d[1] == x: ans += [x] print(len(ans),min(ans))
Ошибка.
Попробуйте повторить позже
Рассматривается множество целых чисел, принадлежащих числовому промежутку
которые делятся на но не делятся на и .
Найдите количество таких чисел и среднее арифметическое минимального и максимальное из этих
чисел
В ответ запишите два этих целых числа: сначала количество, затем среденее арифметическое, если
среднее арифметическое — не целое число, то результат округлите в меньшую сторону.
Для выполнения этого задания можно написать программу или воспользоваться редактором
электронных таблиц.
maxim = 0 minim = 10000000 count = 0 for i in range(1072, 8794): if i % 101 == 0 and i % 11 != 0: if i % 13 != 0 and i % 17 != 0: count += 1 maxim = max(maxim, i) minim = min(minim, i) print(count, int((maxim + minim) / 2))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [1111; 555555], числа, имеющие четное количество делителей.
Программа должна вывести количество таких чисел.
counter = 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
counter += 1
if i != n // i:
counter += 1
return counter
a = 1111 # Задаем границы цикла
b = 555555
ans = 0 # Будущий ответ
for i in range(a, b + 1):
if count_divs(i) % 2 == 0:
ans += 1
print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [12345; 54321], числа, имеющие ровно 2 натуральных делителя. Программа должна вывести количество таких чисел.
def is_prime(n): # функция на проверку того, что число - простое for j in range(2, int(n ** 0.5) + 1): if n % j == 0: return False return True # Два натуральных делителя есть только у простых чисел. ans = 0 # Будущий ответ for i in range(12345,54322): if is_prime(i): ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [1000; 123456789], числа, имеющие ровно 7 нечетных делителей. Программа должна вывести количество таких чисел.
# Заметим, что 7 нечетных делителей имеют числа вида (p**6) * (2**x), где p - простое число, # а x - любое целое неотрицаельное def simple(x): # функция для проверки, что число - простое for d in range(2,int(x**0.5)+1): if x % d == 0: return False return True count = 0 # cчётчик чисел simple_numbers = [x for x in range(3,int(123456789 ** (1/6))+1) if simple(x)] # список, в котором хранятся простые числа от 3 до корня 6-ой степени правой границы for number in simple_numbers: # проход по простым числам for i in range(20): # проход по различным степеням для двойки if 1000 <= number**6 * 2**i <= 123456789: # проверка по условию count += 1 print(count) # вывод ответа
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [111111; 777777], число, имеющее максимальное количество натуральных делителей. Если таких чисел несколько — найдите максимальное из них. Программа должна вывести это число.
counter = 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
counter += 1
if i != n // i:
counter += 1
return counter
a = 111111 # Задаю границы цикла
b = 777777
maxim = 0 # Максимальное количество делителей
ans = 0 # Будущий ответ
for i in range(a, b + 1):
if count_divs(i) >= maxim:
maxim = count_divs(i)
ans = i
print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [20211209; 20220126], числа, имеющие ровно 3 различных делителя, которые являются квадратами простых чисел. Программа должна вывести количество таких чисел.
div = [] # Массив делителей
for i in range(2,int(n**0.5)+1):
if n % i == 0:
div.append(i)
if i != n//i:
div.append(n//i)
return div
def is_prime(n):
for j in range(2, int(n ** 0.5) + 1):
if n % j == 0:
return False
return True
def is_sqrt_prime(n):
if int(n**0.5)**2 == n and is_prime(int(n**0.5)):
return True
return False
def count_sqrt_divs(n):
counter = 0
for i in divs(n):
if is_sqrt_prime(i):
counter += 1
return counter
a = 20211209 # Задаю границы цикла
b = 20220126
ans = 0 # Будущий ответ
for i in range(a, b + 1):
if count_sqrt_divs(i) == 3:
ans += 1
print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа, имеющие ровно натуральных делителей. Напишите в ответ все такие числа через пробел в порядке возрастания.
Заметим, что натуральных делителей имеют только простые числа в степени.
def is_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 for i in range(int(123456789 ** (1 / 10)), int(987654321 ** (1 / 10)) + 1): if (123456789 <= i ** 10 <= 987654321) and is_prime(i): print(i**10)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа, у которых ровно делителей, сумма цифр которых некратна . Количество делителей, чья сумма цифр кратна , может быть любым. Программа должна вывести количество таких чисел.
Если сумма цифр числа некратна , значит и само число некратно . Ровно делителей, некратных , имеют числа вида , где - простое число (не ), а - любое целое неотрицательное число. Теперь напишем программу.
# Функция, проверяющая, простое ли число def is_prime(n): for x in range(2, int(n ** 0.5) + 1): if n % x == 0: return False return True ans = set() start = 1234567 end = 7654321 # Так как мы будем возводить простое число p в 6-ю степень, # перебирать числа будем до корня 6-й степени из самого большого доступного числа for p in range(2, int(end ** (1 / 6)) + 1): # Если число простое и не равно 3, его можно возводить в 6-ю степень if is_prime(p) and p != 3: # Подбираем степень для 3, реализовывая формулу (p ̂ 6) * (3 ̂ x) for j in range(16): num = (p ** 6) * (3 ** j) # Полученное число имеет ровно 7 НЕ кратных 3-м делителей if start <= num <= end: ans.add(num) print(len(ans))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа, имеющие ровно делителей, и все эти делители оканчиваются на или . Программа должна вывести количество таких чисел.
делителей, каждый из которых оканчивается на или , имеет либо число , либо числа вида , где - простое число, не равное , а — любое целое неотрицательное число. Заметим, что удовлетворяет виду , поэтому достаточно рассмотреть только числа такого вида. Напишем программу.
def is_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 ans = 0 # Запустим цикл for только по числам, кратным 5 for i in range(12345680, 87654321, 5): t = i//5 if t ** (1 / 4) == int(t ** (1 / 4)) and is_prime(int(t ** (1 / 4))): ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая находит минимальное число, имеющее ровно натуральных делителей. В ответе запишите найденное число.
count = 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
count += 1
if n // i != i:
count += 1
return count
i = 0
while True:
if count_divs(i) == 256:
print(i)
break
i += 1
Ошибка.
Попробуйте повторить позже
Найдите все натуральные числа, принадлежащие числовому отрезку [335235; 337235] и имеющие ровно 12 нетривиальных делителей.
Для каждого найденного числа запишите эти 12 делителей на экране, отделенные от друг друга ровно одним пробелом. Делители в строке должны следовать в порядке возрастания.
ans = []
for i in range(2, int(x**0.5)+1):
if x % i == 0:
ans += [i]
if x != x // i:
ans += [x // i]
if len(ans) > 12:
return ans
return ans
for i in range(335235, 337235+1):
if len(count_div(i)) == 12:
print(*sorted(count_div(i)))
Ошибка.
Попробуйте повторить позже
Найдите пять последних натуральных чисел, которые имеет ровно 64 делителя на отрезке [1010101; 101010101]. В ответе укажите подходящие числа в порядке возрастания через пробел.
def count_del(x): ans = [1, x] for i in range(2, int(x ** 0.5) + 1): if x % i == 0: ans += [i] if i != x // i: ans += [x // i] if len(ans) > 64: return False return len(ans) == 64 ans = [] for i in range(101010101, 1010100, -1): if count_del(i): ans += [i] if len(ans) == 5: print(*reversed(ans)) break
Ошибка.
Попробуйте повторить позже
Найдите максимальное число, имеющее ровно 128 делителей, которое будет кратно 16 на отрезке [1010101; 101010101]. Напишите в ответ число и через пробел все его нечетные делители также через пробел в порядке возрастания.
ans = [1, x]
for i in range(2, int(x**0.5)+1):
if x % i == 0:
ans += [i]
if i != x // i:
ans += [x//i]
if len(ans) > 128:
return ans
return ans
for i in range(101010101, 1010101-1, -1):
if len(count_del(i)) == 128 and i % 16 == 0:
print(i)
print(*sorted([i for i in count_del(i) if i % 2 != 0]))
break
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа, имеющие ровно четыре различных натуральных делителя, не считая единицы и самого числа. Программа должна вывести количество таких чисел.
def count_div(n): k = 0 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: k += 1 if i != n // i: k += 1 return k ans = 0 for i in range(100100, 300100 + 1): if count_div(i) == 4: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа, имеющие ровно три различных натуральных делителя, не считая единицы и самого числа. Программа должна вывести количество таких чисел.
def divs(n): # функция, которая возращает количество делителей числа k = 0 for i in range(1, int(n**0.5) + 1): if n % i == 0: k += 1 if i != n // i: k += 1 if k > 5: # для оптимизации выходим из функции для текущего числа натуральных делителей, включая 1 и само число больше 5 return 0 return k ans = 0 for i in range(100010, 321342): if divs(i) == 5: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа, имеющие ровно делителей, оканчивающихся на или . В ответ запишите все найденные числа через пробел в порядке возрастания.
def is_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 ans = 0 # Запустим цикл for только по числам, кратным 5 for i in range(28916485, 49716586, 5): t = i//5 if t ** (1 / 4) == int(t ** (1 / 4)) and is_prime(int(t ** (1 / 4))): print(i)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [84052; 84130], число, имеющее максимальное количество различных натуральных делителей, если таких чисел несколько — найдите минимальное из них. Выведите на экран через пробел количество делителей такого числа и само число.
Например, в диапазоне [2; 48] максимальное количество различных натуральных делителей имеет число 48, поэтому для этого диапазона вывод на экране должна содержать следующие значения:
10 48 | |
def count_divs(n): # функция для подсчёта количества делителей числа counter = 0 for i in range(1, int(n**0.5)+1): if n % i == 0: counter += 1 if i != n//i: counter += 1 return counter maxim = 0 maxim_counter = 0 # максимальное кол-во делителей определенного числа for i in range(84052, 84130+1): temp = count_divs(i) if temp > maxim_counter: # если кол-во делителей текущего числа больше максимального кол-ва делителей maxim_counter = temp # обновляем максимальное кол-во делителей maxim = i # обновляем число print(maxim_counter, maxim)
Ошибка.
Попробуйте повторить позже
Найдите все натуральные числа, принадлежащие отрезку [101 000 000; 102 000 000], у которых ровно три различных чётных делителя. В ответе перечислите найденные числа через пробел в порядке возрастания.
def prime(n): for i in range(2, int(n**0.5)+1): if n % i == 0: return False return True for i in range(101_000_000, 102_000_000+1): n = i if n % 2 == 0: n = n//2 else: continue if n % 2 != 0: if n**0.5 == int(n**0.5) and prime(n**0.5): print(i)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [287429; 319267], числа, имеющие ровно 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(287429, 319267+1): d = divs(x) if len(d) == 3: # если у определенного числа 3 делителя print(d[1]) # вывод второго делителя