25.01 Делители числа
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку ,
число, имеющее максимальное количество различных натуральных делителей, если таких чисел несколько —
найдите максимальное из них. Выведите на экран само число и количество делителей такого числа через
пробел.
def count_div(n): # функция, которая подсчитывает кол-во делителей counter = 2 for i in range(2, int(n ** 0.5) + 1): if n % i == 0: counter += 1 if n // i != i: counter += 1 return counter maxim = 0 # максимальное кол-во делителей числа ans = 0 for i in range(267153, 357254): s = count_div(i) # кол-во делителей текущего числа if s >= maxim: # нестрогий знак для того чтобы в ans сохранить максимальное(последнее) число maxim = s ans = i print(ans, maxim)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [300000; 333000], числа, имеющие ровно 3 различных натуральных делителя. Запишите такие числа через пробел, в порядке возрастания.
def divs(n): # функция возращающая список делителей числа d = set() for j in range(1, int(n ** 0.5) + 1): if n % j == 0: d.add(j) d.add(n//j) if len(d) > 3: # для оптимизации выходим из функции если кол-во делителей больше 3 return d return sorted(d) for i in range(300000, 333000 + 1): if len(divs(i)) == 3: print(i)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди чисел, принадлежащих числовому отрезку [88535; 153373], числа, имеющие ровно 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) for i in range(88535, 153373 + 1): d = [x for x in divs(i) if x % 2 != 0] #список, в котором храняться только нечётные делители числа if len(d) == 5: print(i)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [198374; 295381], числа,имеющие ровно 7 различных нечётных натуральных делителей. Для каждого найденного числа выведите эти 7 делителей на экран, делители каждого нового числа выводить с новой строки. Делители в строке должны следовать в порядке убывания.
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 i in range(198374, 295382): d = [x for x in divs(i) if x % 2 != 0] #список, в котором храняться только нечётные делители числа if len(d) == 7: print(d[::-1]) # вывод списка делителей в обратном порядке
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [100100; 300300], числа,имеющие ровно 3 различных натуральных делителя, не считая единицы и самого числа. Вывести на экран количество таких чисел.
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) > 3: # для оптимизации выходим из функции если кол-во делителей больше 3 return d return sorted(d) count = 0 for x in range(100100,300301): d = divs(x) if len(d) == 3: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [231893; 251859], число, имеющее максимальное количество различных натуральных делителей, если таких чисел несколько — найдите максимальное из них. Запишите через пробел количество делителей такого числа и само число.
def countDelitel(n): # функция, которая возращает кол-во делителей числа 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 maxCountDelit = 0 maxNumber = 0 for i in range(231893, 251859 + 1): k = countDelitel(i) if k >= maxCountDelit: #нестрогий знак для того чтобы вывести максимальное(последнее) число maxCountDelit = k maxNumber = i print(maxCountDelit, maxNumber)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [591645;592845], число, имеющее максимальное количество натуральных делителей. Если таких чисел несколько — найдите минимальное из них. Программа должна вывести это число.
b = 592845
ans = 0 # Будущий ответ
maxcount = 0 # Количество делителей ответа
for i in range(a, b + 1):
count = 0 # Счетчик делителей
for j in range(1, int(i**0.5) + 1):
if i % j == 0:
count += 1 # Считаем делители
if (count > maxcount): # Проверяем, вдруг текущее число круче
ans = i
maxcount = count
print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [300000;333000], числа, имеющие ровно 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) count = 0 # кол-во подходящих чисел for x in range(300000,333001): if len(divs(x)) == 3: # если у текущего числа 3 делителя count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку ,
числа, имеющие ровно
различных натуральных делителей. Программа должна вывести количество таких
чисел.
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(53671,125699): if len(divs(x)) == 5: # если у текущего числа 5 делителей count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая выведет все общие делители чисел 230010 и 600270.
def divs(n): 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 a = 230010 # первое число b = 600270 # первое число ans = [] # список общих делителей ad = divs(a) # делители первого числа bd = divs(b) # делители второго числа for i in ad: # проход по делителям первого числа if i in bd: # если такой делитель есть среди делителей второго числа ans.append(i) # добавляем в список print(*ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [1;10000], числа, имеющие ровно 1 нечётный натуральный делитель. Программа должна вывести количество таких чисел.
Один нечетный натуральный делитель имеют только степени 2, так что наша задача - посчитать, сколько степеней 2 находится в заданном промежутке.
Решение 1
s = 1 ans = 1 # т.к. у 1 тоже один нечетный натуральный делитель, то изначально ans=1 while s * 2 <= 10000: s *= 2 ans += 1 print(ans)
Решение 2
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(1,10001): d = [i for i in divs(x) if i % 2 != 0 ] #список, в котором храняться только нечётные делители числа if len(d) == 1: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Пусть M(N) – произведение 5 наименьших различных натуральных делителей натурального числа N, не считая единицы. Если у числа N меньше 5 таких делителей, то M(N) считается равным нулю.
Найдите 5 наименьших натуральных чисел, превышающих 500 000 000, для которых .
В ответе запишите найденные значения M(N) в порядке возрастания соответствующих им чисел N.
counter = 0 x = 500000001 while counter < 5: # пока кол-во подходящих чисел меньше 5 d = set() # множество делителей числа for i in range(2, int(x ** 0.5) + 1): if x % i == 0: d |= {i, x // i} if len(d) >= 5: # если кол-во делителей больше и равно 5 d = sorted(d)[:5] # берем 5 наименьших делителей p = 1 # произведение делителей for i in d: # проход по делителям p *= i if 0 < p < x: print(p) # вывод произведения counter += 1 # увеличение подходящих чисел x += 1 # увеличение текущего числа
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [190201;190280], числа, имеющие ровно 4 различных четных делителя. Программа должна вывести эти 4 делителя для каждого найденного числа в порядке убывания. Числа нужно искать в порядке возрастания.
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 n in range(190201, 190280 + 1): d = [x for x in divs(n) if x % 2 == 0] #список, в котором хранятся только чётные делители числа if len(d) == 4: # если делителей ровно 4 print(d[::-1]) # вывод делителей в обратном порядке
Ошибка.
Попробуйте повторить позже
Пусть M - сумма минимального и максимального натурального делителей целого числа, не считая единицы и самого числа. Если таких делителей нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, большие 452 021, в порядке возрастания и ищет среди них такие, для которых значение М при делении на 7 дает в остатке 3. Вывести первые 5 найденных чисел и соответствующие им значения М.
def m(n): # функция, которая считает сумму минимального и максимального нетривиальньных делителей for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return i + n // i return 0 k = 0 for i in range(452021 + 1, 10000000000000): if m(i) % 7 == 3: print(i, m(i)) k += 1 if k == 5: break
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку числа,
имеющие ровно
различных нечётных натуральных делителей. Программа должна вывести количество таких
чисел.
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(88535,153374): d = [i for i in divs(x) if i % 2 != 0] #список,в котором хранятся только нечётные делители числа if len(d) == 5: # если таких делителей ровно 5 count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [88535;153373], числа, имеющие ровно 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) count = 0 for x in range(88535,153374): d = [i for i in divs(x) if i % 2 == 0] #список,в котором хранятся только чётные делители числа if len(d) == 5: # если таких делителей ровно 5 count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [;
], числа,
имеющие ровно
различных нечётных натуральных делителей. Для каждого числа выведите все эти семь делителей на
экран в порядке возрастания (для каждого числа с новой строки).
Решение через цикл:
Запустим цикл в рамках, заданных условием. Для каждого числа найдём делители от 1 до его корня, таким образом программа будет работать точно и быстро. Если нашли делитель - проверим, есть ли дополняющий к нему (поделив число на уже найденный). Берём только нечётные делители, вносим их в список, параллельно увеличивая счётчик. Если стало более 7 делителей - завершаем перебор, ведь смысла идти дальше нет. В конце, если попалось ровно 7 делителей, выведем их.
a = 198374 # Зададим границы цикла b = 295381 for i in range(a, b + 1): # +1 чтобы было включительно divs = [] # Массив, в который будем сохранять подходящие делители counter = 0 # Счетчик делителей числа for j in range(1, int(i**0.5) + 1): if i % j == 0: # Если нашли делитель if j % 2 == 1: # Если делитель нечетный, то он подходит divs.append(j) # Сохраняем делитель counter += 1 # Увеличиваем счётчик # Если дополняющий делитель нечетный # и мы его еще не добавили, то он подходит if i // j % 2 == 1 and j != i // j: divs.append(i // j) # Сохраняем делитель counter += 1 # Увеличиваем счётчи # Оптимизируем прогу, выпрыгиваем из чисел с большим числом делителей if counter > 7: break if counter == 7: # Если нашли нужное число # Выводим делители в порядке возрастания без [] print(*(sorted(divs)))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку , числа,
имеющие ровно
различных натуральных делителя не считая единицы и самого числа. Выведите количество таких
чисел.
Решение 1
def countDelitel(n): count = 0 for j in range(2, int(n ** 0.5) + 1): if n % j == 0: count += 2 if j == n // j: count -= 1 if count > 3: return False if count == 3: return True return False k = 0 for i in range(123123, 321322): if countDelitel(i): k += 1 print(k)
Решение 2
def prime(n): for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True ans = 0 for i in range(123123,321322): if int(i ** 0.25) == i ** 0.25 and prime(i ** 0.25): ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [52112;623122], числа, имеющие ровно 3 различных простых делителя. Программа должна вывести количество таких чисел.
def prime(n): # функция, которая проверяет, что число - простое if n > 1: for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True return False 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) return sorted(d) count = 0 for x in range(52112,623123): d = [i for i in divs(x) if prime(i)] # список, в котором хранятся только простые делители числа if len(d) == 3: count += 1 print(count)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [52112;623122], числа, имеющие ровно 3 различных делителя, которые являются квадратами простых чисел. Программа должна вывести количество таких чисел.
def prime(n): # функция, которая проверяет, что число - простое if n > 1: for i in range(2, int(n**0.5) + 1): if n % i == 0: return False return True return False 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) return sorted(d) count = 0 for x in range(52112,623123): d = [i for i in divs(x) if int(i**0.5) == i**0.5 and prime(i**0.5)] # список, в котором хранятся только квадраты простых делителей числа if len(d) == 3: count += 1 print(count)