Ошибка.
Попробуйте повторить позже
Найдите все натуральные числа, принадлежащие отрезку [ ; ], у которых ровно различных четных делителей. В ответе укажите количество данных чисел.
Если число имеет разложение вида ... , то количество чётных делителей такого числа равно ... (выбрали степень двойки от до , степень каждого простого от до ). По условию это равно — простое число, как произведение натуральных чисел его можно представить как или .
Случай : , все число равно , не подходит.
Случай : , какое-то , все остальные — приходим к разложению вида .
На частном случае решение будет выглядеть так:
С помощью стандартной программы найдем подходящие нам числа до для того, чтобы рассмотреть их:
def dividers(n): k = 0 for i in range(1, int(n ** 0.5) + 1): if n % i == 0: if i % 2 == 0: k += 1 if (n // i) % 2 == 0 and n // i != i: k += 1 return k for i in range(1, 100000): if dividers(i) == 7: print(i)
Подходящие нам числа в диапазоне до - это , и . Хочется разложить эти числа:
Заметим, что все числа раскладываются на , где - простое число.
Воспользуемся выведенной формулой для решения:
def prime(x): for i in range(2, int(x**0.5)+1): if x % i == 0: return False return True ans = 0 for i in range(int((33333333 // 2)**(1/6)), int((333333333 // 2)**(1/6)) + 1): if prime(i): if 33333333 <= 2*(i**6) <= 333333333: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Найдите все натуральные числа, принадлежащие отрезку [11 111 111; 77 777 777], у которых ровно различных делителей. В ответе укажите количество данных чисел.
def prime(x): for i in range(2, int(x**0.5)+1): if x % i == 0: return False return True ans = 0 for i in range(int(11111111**0.25), int((77777777+1)**0.25)+1): if prime(i): ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая получает на вход число и возвращает количество его делителей. В ответе укажите количество делителей для числа .
Решение 1
count = 0 x = int(input()) for i in range(1, int(x ** 0.5) + 1): if x % i == 0: count += 1 if x // i != i: count += 1 print(count)
Решение 2
a = set() x = int(input()) for i in range(1, int(x ** 0.5) + 1): if x % i == 0: a.add(i) a.add(x // i) print(len(a))
Ошибка.
Попробуйте повторить позже
Дано число и массив с числами . Назовем «подходящими» элементы массива, которые являются делителями числа . Найдите сумму чисел, которые в паре с «подходящими» элементами массива дают произведение равное .
a = [1, 2, 98, 43, 89, 739] x = 1052336 summa = 0 for i in a: if x % i == 0: summa += x // i print(summa)
Ошибка.
Попробуйте повторить позже
Для найдите разность между количеством делителей числа , которые больше квадратного корня из и количеством делителей числа , которые меньше квадратного корня из . В ответе укажите искомую разность.
Обратим внимание, что если - делитель числа , то и - делитель числа . Очевидно, эти два числа находятся по разную сторону от (иначе, предположим, что они оба меньше, тогда чего явно не может быть, случай, когда оба больше - аналогичен). Таким образом, мы видим, что все делители разбиваются на пары, в которых один делитель меньше корня, а другой - больше. Отсюда понимаем, что делителей, меньших корня столько же, сколько и больших.
print(0)
А теперь представим, что мы не знаем математику, и попробуем решить это другим способом:
x = 3052336 sq = x ** 0.5 more = 0 less = 0 for i in range(1, x + 1): if x % i == 0: if i > sq: more += 1 if i < sq: less += 1 print(more - less)
Ошибка.
Попробуйте повторить позже
Утверждается, что количество делителей числа четно. Найдите количество пар делителей числа , произведение которых равно исходному числу. При этом пары делителей выбираются следующим образом минимальный делитель * максимальный делитель, предминимальный делитель * предмаксимальный делитель и т.д. В ответе укажите два числа через пробел: сначала количество рассматриваемых пар, затем количеством пар, произведение которых равно исходному числу.
a = [] x = 2052336 for i in range(1, x + 1): if x % i == 0: a.append(i) count = 0 n = len(a) for i in range(n // 2): if a[i] * a[n - i - 1] == x: count += 1 print(n // 2, count)
Ошибка.
Попробуйте повторить позже
Назовём числа и числами-близнецами, если .
Найдите наименьшее натуральное число, имеющее ровно 512 делителей, простые делители которого образуют не менее трёх пар чисел-близнецов. В ответе укажите число, а также все его простые делители.
from itertools import combinations_with_replacement def prime(x): for i in range(2, int(x ** 0.5) + 1): if x % i == 0: return False return True def count_del(x): ans = [] for i in range(2, int(x ** 0.5) + 1): if x % i == 0: ans += [i] ans += [x // i] return sorted(list(set(ans))) def check(a): ans = 1 for i in range(len(a)): ans *= a[i] if ans > 512: return False return ans == 512 dels = count_del(512) primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] # Если скобок 9 штук и каждое альфа равно 1 minim = 2 ** 511 # Если скобок 9 штук и каждое альфа равно 1 t = 1 degrees = [2] * 9 for k in range(len(degrees)): t *= (primes[k] ** (degrees[k] - 1)) minim = min(minim, t) # Все остальные случаи for j in range(2, 9): for i in combinations_with_replacement(dels, j): if check(i): t = 1 degrees = i[::-1] for k in range(len(degrees)): t = t * (primes[k] ** (degrees[k] - 1)) minim = min(minim, t) print(minim, *[i for i in count_del(minim) if prime(i)])
Ошибка.
Попробуйте повторить позже
Найдите максимальное число на отрезке [1010101; 101010101], имеющее ровно 128 делителей, которое будет кратно 16. Выведите на экран в первой строке найденное число, а во второй все его нечетные делители в порядке возрастания.
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) > 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, *sorted([i for i in count_del(i) if i % 2 != 0])) break
Ошибка.
Попробуйте повторить позже
Найдите наибольшее натуральное число на отрезке , которое имеет ровно делителей. В ответе укажите число.
def divs(n): count = 0 for i in range(1,int(n**0.5)+1): if n%i==0: count += 1 if i!=n//i: count += 1 return count for x in range(5000000, 10000 - 1, -1): if divs(x) == 10: print(x) break
Ошибка.
Попробуйте повторить позже
Найдите наименьшее натуральное число, которое имеет ровно делителей. В ответе укажите число.
def prime(x):
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True
def count_del(x):
ans = []
for i in range(2, int(x**0.5)+1):
if x % i == 0:
ans += [i]
ans += [x//i]
return sorted(list(set(ans)))
def check(a):
ans = 1
for i in range(len(a)):
ans *= a[i]
if ans > 20:
return False
return ans == 20
dels = count_del(20)
primes = [i for i in range(2, 100) if prime(i)]
#Если одна скобка
minim = 2**19
#Все остальные случаи
for j in range(2, 4):
for i in combinations_with_replacement(dels, j):
if check(i):
t = 1
degrees = i[::-1]
for k in range(len(degrees)):
t = t * (primes[k] ** (degrees[k]-1))
minim = min(minim, t)
print(minim)
Ошибка.
Попробуйте повторить позже
Найдите все натуральные числа, принадлежащие отрезку [ ; ], у которых ровно различных четных делителей. В ответе укажите количество данных чисел.
Если число имеет разложение вида ... , то количество чётных делителей такого числа равно ... (выбрали степень двойки от до , степень каждого простого от до ). По условию это равно — простое число, как произведение натуральных чисел его можно представить как или .
Случай : , все число равно , не подходит.
Случай : , какое-то , все остальные — приходим к разложению вида .
На частном случае решение будет выглядеть так:
С помощью стандартной программы найдем подходящие нам числа до для того, чтобы рассмотреть их:
def dividers(n): k = 0 for i in range(1, int(n ** 0.5) + 1): if n % i == 0: if i % 2 == 0: k += 1 if (n // i) % 2 == 0 and n // i != i: k += 1 return k for i in range(1, 100000): if dividers(i) == 7: print(i)
Подходящие нам числа в диапазоне до - это , и . Хочется разложить эти числа:
Заметим, что все числа раскладываются на , где - простое число.
Воспользуемся выведенной формулой для решения:
def prime(x): for i in range(2, int(x**0.5)+1): if x % i == 0: return False return True ans = 0 for i in range(int((33333333 // 2)**(1/6)), int((99999999 // 2)**(1/6)) + 1): if prime(i): if 33333333 <= 2*(i**6) <= 99999999: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Найдите все натуральные числа, принадлежащие отрезку [ ; ], у которых ровно различных нечётных делителя (количество чётных делителей может быть любым). В ответе укажите количество данных чисел.
def is_prime(n): if n <= 1: return False for j in range(2, int(n ** 0.5) + 1): if n % j == 0: return False return True ans = 0 for j in range(3, 10000): if is_prime(j): for i in range(26): if 33222555 <= 2**i*j**2 <= 99888999: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Среди целых чисел, принадлежащих числовому отрезку , найдите числа, среди нетривиальных делителей которых есть ровно двузначных чисел. Для каждого найденного числа запишите в ответе само число, наименьший и наибольший из его двузначных делителей через пробел. Так, например, для числа учитываются только делители и .
def count_del(x): ans = [] for i in range(2, int(x ** 0.5) + 1): if x % i == 0: if len(str(i)) == 2: ans += [i] if i != x // i: if len(str(x // i)) == 2: ans += [x // i] return sorted(ans) ans = 0 for i in range(333555, 777999 + 1): if len(count_del(i)) == 38: print(i, count_del(i)[0], count_del(i)[-1])
Ошибка.
Попробуйте повторить позже
Число называется избыточным, если оно строго меньше суммы своих собственных делителей (то есть всех положительных делителей, отличных от самого числа). Определите количество избыточных чисел из диапазона [5; 50000].
ans = [1]
for i in range(2, int(x**0.5)+1):
if x % i == 0:
ans += [i]
if i != x//i:
ans += [x//i]
return sum(ans) > x
ans = 0
for i in range(5, 50000+1):
if count_del(i):
ans += 1
print(ans)
Ошибка.
Попробуйте повторить позже
Определите количество составных натуральных чисел из диапазона , у которых количество нетривиальных делителей не менее трех.
Примечание. Нетривиальный делитель — делитель, не равный единице и самому числу.
def count_del(x): ans = 0 for i in range(2, int(x ** 0.5) + 1): if x % i == 0: ans += 1 if i != x // i: ans += 1 if ans >= 3: return True return False ans = 0 for i in range(3, 30000 + 1): if count_del(i): ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Найти минимальное число, большее , которое имеет ровно делителей, из которых ровно – простые. В ответе запишите все простые делители найденного числа в порядке возрастания.
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):
k, k_pr = 0, 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
k += 1
if prime(i):
k_pr += 1
if n // i != i:
k += 1
if prime(n // i):
k_pr += 1
if k == 60 and k_pr == 4:
return True
return False
def prime_divs(n):
a = []
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
if prime(i):
a.append(i)
if n // i != i and prime(n // i):
a.append(n // i)
a.sort()
return a
ans = 0
for i in range(156239, 10000000):
if okay(i):
ans = i
break
print(*prime_divs(ans))
Ошибка.
Попробуйте повторить позже
Назовем число добрым, если среди его делителей есть хотя бы три квадрата простых чисел. Найти 5 минимальных добрых чисел, больших . В ответе запишите найденные числа через пробел в порядке возрастания.
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):
k = 0
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
if int(i ** 0.5) == i ** 0.5 and prime(i ** 0.5):
k += 1
if n // i != i:
x = n // i
if int(x ** 0.5) == x ** 0.5 and prime(x ** 0.5):
k += 1
if k >= 3:
return True
return False
counter = 0
for i in range(21317, 100000000):
if okay(i):
print(i, end=’ ’)
counter += 1
if counter == 5:
break
Ошибка.
Попробуйте повторить позже
Найти на промежутке числа, которые нацело делится на целую часть среднего арифметического своих делителей. В ответе запишите количество таких чисел и их произведение.
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)
Ошибка.
Попробуйте повторить позже
Назовем число красивым, если оно делится на сумму своих цифр и имеет ровно 6 нетривиальных делителей. Найти на промежутке количество красивых чисел и их среднее арифметическое. В ответе запишите два числа через пробел: сначала количество чисел, потом целую часть их среднего арифметического.
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))
Ошибка.
Попробуйте повторить позже
Найти числа из промежутка , у которых есть ровно 3 натуральных делителя, которые делятся на 17. В ответе запишите эти числа и три минимальных делителя каждого числа (делители должны идти по возрастанию). Ответ запишите в формате:
Число1, Дел1, Дел2, Дел3; Число2, Дел1, Дел2, Дел3; и т.д. (После каждой запятой или точки с запятой ставится пробел, каждая группа (число и его три минимальных делителя) отделяется от следующей группы точкой с запятой, после последней группы никакой знак не ставится).
a = [] # массив делителей
k17 = 0 # счетчик делителей, кратных 17
for i in range(1, int(n ** 0.5) + 1):
if n % i == 0:
a.append(i)
if i % 17 == 0:
k17 += 1
if n // i != i:
a.append(n// i)
if (n // i) % 17 == 0:
k17 += 1
if k17 > 3: # уже нашли больше 3 делителей, кратных 17
return False, [] # Число не подходит, вернем пустой массив
if k17 < 3: # не нашли 3 делителя, кратных 17
return False, []
if k17 == 3:
a.sort()
return True, a[:3] # a[:3] - срез массива, 3 минимальных делителя
# Функция возвращает кортеж, где нулевой элемент - True/False,
# первый элемент - три минимальных делителя
for i in range(750000, 930000):
h = only_3_div_kr_17(i)
if h[0] == True: # если число подходит
divs = h[1] # три минимальных делителя
print(i, *divs, sep=’, ’, end=’; ’)
# при копировании ответа не копируем последнюю ;