Ошибка.
Попробуйте повторить позже
Среди целых чисел, принадлежащих числовому отрезку [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))
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
3) символ «&» означает любую последовательность нечётных цифр произвольной длины; в том числе «&» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске &123*321?, делящиеся на 2004 без остатка. В ответе запишите первые пять чисел в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 2004.
from itertools import product def simple(x):return x > 1 and all(x % y for y in range(2,int(x**0.5)+1)) digits = ’0123456789’ odd_digits = ’13579’ res = [] for i in range(4): for digit_1 in product(odd_digits,repeat = i): for j in range(4): for digit_2 in product(digits,repeat = j): for digit_3 in product(digits,repeat = 1): res += [int(’’.join(digit_1) + ’123’ + ’’.join(digit_2) + ’321’ + ’’.join(digit_3))] for x in sorted(set(res)): if x <= 10**10 and x % 2004 == 0: print(x,x//2004)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 3*3?12, делящиеся на 3952 без остатка, у которых также сумма цифр числа является нечётной. В ответе запишите первые пять чисел в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 3952.
Способ решения 1: from fnmatch import fnmatch count = 0 for x in range(35568,10**9+1,3952): if fnmatch(str(x),’3*3?12’) and sum(map(int,str(x))) % 2 != 0: count += 1 print(x,x//3952) if count > 4: break Способ решения 2: from itertools import product digits = ’0123456789’ res = [] for i in range(5): for digit_1 in product(digits,repeat = i): for digit_2 in product(digits,repeat = 1): res += [int(’3’+’’.join(digit_1) + ’3’ + ’’.join(digit_2) + ’12’)] for x in sorted(set(res)): if x <= 10**9 and x % 3952 == 0 and sum(map(int,str(x))) % 2 != 0: print(x,x//3952)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 2*56??, делящиеся на 2048 без остатка, у которых более 5 делителей, соответствующих маске 1*4. В ответе запишите все найденные числа в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 2048.
Способ решения 1: from fnmatch import fnmatch def divs(x):#функция поиска делителей для определенного числа d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) for x in range(4096,10**7+1,2048): if fnmatch(str(x),’2*56??’):#если число удовлетворяет маске числа d = [i for i in divs(x) if fnmatch(str(i),’1*4’)]#делаем список,в котором будут делители, #удовлетворяющие маске делителей. if len(d) > 5: print(x,x//2048) Способ решения 2: from itertools import product def divs(x): d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) digits = ’0123456789’ res = []#список, в котором будут числа удовлетворяющие маске числа need_div = []#список, в котором будут числа удовлетворяющие маске делителей #формирование чисел по определенной маске чисел for i in range(3): for digit_1 in product(digits,repeat = i): for digit_2 in product(digits,repeat = 1): for digit_3 in product(digits,repeat = 1): res += [int(’2’ + ’’.join(digit_1) + ’56’ + ’’.join(digit_2) + ’’.join(digit_3))] #формирование чисел по определенной маске делителей for i in range(6): for digit_1 in product(digits,repeat = i): need_div += [int(’1’+’’.join(digit_1) + ’4’)] for x in sorted(set(res)):#проход по всевозможным получившимся числам if x <= 10**7 and x % 2048 == 0: d = [i for i in divs(x) if i in need_div]#список, в котором будут делители числа, # удовлетворяющие маске делителей if len(d) > 5:#если таких делителей больше 5 print(x,x//2048)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
1) символ «?» означает ровно одну произвольную цифру;
2) символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 1*3577?0, делящиеся на 1975 без остатка. В ответе запишите все найденные числа в порядке возрастания, и через пробел – соответствующие им результаты деления этих чисел на 1975.
Способ решения 1: from fnmatch import fnmatch for x in range(1358800,10**9+1,1975): if fnmatch(str(x),’1*3577?0’): print(x,x//1975) Способ решения 2: ’’’ Идея решения заключается в том, чтобы по частям собирать число, удовлетворяющее маске и затем проверять его на кратность. Такое решение оптимальнее по времени поскольку мы не проверяем числа не подходящие по маске, а сразу составляем те, что нам подходят. ’’’ from itertools import product#импортируем модуль product из itertools digits = ’0123456789’#всевозможные цифры res = []#список, в который мы будем сохранять числа for i in range(3):#проведя анализ, можно понять, что в звёздочке не может быть больше двух цифр, #по этой причине делаем цикл от 0 до 2 включительно. for digit_1 in product(digits,repeat = i):#делаем произвольную подпоследовательность из цифр, #таким способом, мы симулируем звёздочку for digit_2 in product(digits,repeat = 1):#такой записью, мы симулируем знак вопроса res += [int(’1’ + ’’.join(digit_1) + ’3577’ + ’’.join(digit_2) + ’0’)] #собираем нашу маску по частям, функция join переводит элементы кортежа, списка в строку. for x in sorted(set(res)):#проходимся по всем получившимся числам if x <= 10**9 and x % 1975 == 0: print(x,x//1975)#вывод числа и его частного
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [316312; 451234] числа, у которых произведение нетривиальных делителей кратна 14. В ответ укажите количество таких чисел и через пробел сумму цифр максимального произведения нетривиальных делителей подходящего числа.
import math 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(316312, 451235): m = divs(x) if len(m) > 0: d = math.prod(m) # воспользуемся модулем math и функцией prod, # которая вычисляет произведение всех элементов списка if d % 14 == 0: ans += [d] print(len(ans),sum(map(int,str(max(ans)))))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [414400; 561293] числа, у которых сумма нетривиальных делителей больше числа и при этом не кратна 6. В ответ укажите количество таких чисел и через пробел максимальную сумму цифр подходящего числа.
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) count = 0 mx_sm = 0 for x in range(414_400,561_294): d = sum(divs(x)) if d > x and d % 6 != 0: count += 1 mx_sm = max(mx_sm,sum(map(int,str(x)))) print(count,mx_sm)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая выведет 5 наименьших чисел, больших 800000 у которых ровно сумма нечётных нетривиальных делителей чётна, а сумма чётных нетривиальных делителей оканчивается на 4. Для каждого числа укажите через пробел количество его нетривиальных делителей.
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) count = 0 for x in range(800_001,10**6): d = divs(x) odd = [x for x in d if x % 2 != 0] even = [x for x in d if x % 2 == 0] if sum(odd) % 2 == 0 and sum(even) % 10 == 4: print(x,len(d)) count += 1 if count > 4: break
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [612376; 875324] числа, у которых ровно 5 простых делителей. В ответ укажите количество нечётных чисел среди таких чисел и через пробел сумму цифр подходящих чисел.
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(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) ans = [] sm = 0 for x in range(612376,875325): d = [i for i in divs(x) if simple(i)] if len(d) == 5: if x % 2 != 0: ans += [x] sm += sum(map(int,str(x))) print(len(ans),sm)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [412412; 535242] числа, у которых сумма нетривиальных делителей кратна 184 и сумма цифр суммы нетривиальных делителей является простым числом. В ответ укажите количество таких чисел и через пробел минимальное число, большее 500000.
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(412412,535242): d = sum(divs(x)) if d % 184 == 0 and simple(sum(map(int,str(d)))): ans += [x] print(len(ans),min(x for x in ans if x > 500000))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [503123; 533211] числа, у которых сумма и количество простых делителей является простым числом. В ответ укажите количество таких чисел и через пробел разность максимального и минимального числа.
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(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) ans = [] for x in range(503123,533212): d = [i for i in divs(x) if simple(i)] if simple(len(d)) and simple(sum(d)): ans += [x] print(len(ans), max(ans)-min(ans)
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [312322; 486711] числа, у которых количество чётных делителей равно количеству нечётных делителей и при этом сумма делителей является нечётной. В ответ укажите количество таких чисел.
def divs(x): d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) ans = [] for x in range(312322,486712): d = divs(x) odd = [x for x in d if x % 2 != 0] even = [x for x in d if x % 2 == 0] if len(even) == len(odd) and sum(d) % 2 != 0: ans += [x] print(len(ans))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [153749; 251674] числа, у которых есть ровно 6 делителей, оканчивающихся на одну и ту же цифру. В ответ укажите количество таких чисел и через пробел целую часть среднего арифметического таких чисел.
def divs(x): d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) ans = [] for x in range(153749,251675): sm = [[] for i in range(10)]#двумерный список, в котором мы будем хранить делитель в определённых ячейках, #в зависимости от их последней цифры d = divs(x) if len(d) >= 6: for div in d:#проход по делителям числа sm[div % 10].append(div)#распределяем делители в различные списки в зависимости от их последней цифры for i in sm:#проход по группам делителей, оканчивающихся на одну и ту же цифру if len(i) == 6:#если количество делителей равно 6 ans += [x]#то добавляем число break #вывод количества чисел и среднего арифметического таких чисел print(len(ans),sum(ans)/len(ans))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [15374; 55166] пары чисел с одинаковой суммой цифр чисел и одинаковой суммой чисел их делителей. В ответ запишите количество таких пар и через пробел значение суммы цифр чисел, с которой больше всего встречается таких пар.
def divs(x): d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) d = [[] for i in range(55)]#двумерный массив, # в котором мы будем хранить суммы делителей чисел в определенной ячейке, # исходя из суммы цифр самого числа for x in range(15374,55167): sm = sum(map(int,str(x)))#считаем сумму цифр числа sum_divs = sum(divs(x))#считаем сумму делителей числа d[sm].append(sum_divs)#складываем в определенную ячейку сумму делителей count = {x:0 for x in range(55)}#словарь, у которого в качестве ключа числа от 0 до 55, #в качестве значения будет количество подходящих пар. #пример, 13:5 - это означает, что есть 5 пар среди чисел, у которых сумма цифр равна 13 for i in range(len(d)):#проход по двумерному списку if len(d[i]) > 1:#если возможно составить пару for j in range(len(d[i])-1):#перебираем всевозможные пары в списке for k in range(j+1,len(d[i])): if d[i][j] == d[i][k]:#если суммы делителей равны count[i] += 1#то увеличиваем счётчик под индексом i, # который обозначает чему равна сумма цифр чисел в этом списке #вывод количества таких пар и значения суммы цифр, для которой собралось больше всего таких пар print(sum(count.values()),*[x for x in count.keys() if count[x] == max(count.values())])
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [8077; 331323] cуперсовершенные числа. В ответ укажите количество таких чисел и через пробел сумму таких чисел. Суперсовершенные числа - это числа, чья сумма делителей числа суммы делителей самого числа вдвое больше изначального числа. Примеры: число 16 - его сумма делителей равна 31, сумма делителей числа 31 равна 32 - число 32 в два раза больше числа 16; число 4 - его сумма делителей равна 7, сумма делителей числа 7 равна 8 - число 8 в два раза больше числа 4.
def divs(x): d = set() for i in range(1,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) ans = [] for x in range(8077,331323+1): d = sum(divs(x)) if sum(divs(d)) / 2 == x: ans += [x] print(len(ans),sum(ans))
Ошибка.
Попробуйте повторить позже
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [100; 100000], пары дружественных чисел. В ответ укажите количество таких пар и через пробел минимальную чётную сумму такой пары. Дружественные числа — это два различных натуральных числа, для которых сумма всех собственных делителей (исключая в качестве делителя само число) первого числа равна второму числу и наоборот, сумма всех собственных делителей (исключая в качестве делителя само число) второго числа равна первому числу. Пример, числа 220 и 284. У числа 220 делителями являются числа: 1,2,5,10,11,20,22,44,55,110 их сумма равна 284. У числа 284 делителями являются числа: 1,2,4,71,142 их сумма равна 220.
def divs(x):#функция поиска делителей определенного числа d = {1}#изначально включаем единицу for i in range(2,int(x**0.5)+1): if x % i == 0: d |= {i,x//i} return sorted(d) L = 100#левая граница отрезка M = 100001#правая граница отрезка d = {x:sum(divs(x)) for x in range(L,M)} #словарь, в котором в качестве ключа будет число из промежутка, # а в качестве значения будет сумма делителей (за исключением самого числа) данного числа # для оптимизации в словаре мы будем оставлять только те числа, # чья сумма делителей находится в пределах нашего отрезка count = [] mn = 10**20 for key in d.keys():#проходимся по всевозможным числам из отрезка if key == d.get(d[key]) and d[key] != key:#если первое число равно сумме делителей второго числа, #и при этом сумма делителей первого числа не равна первому числу if sorted([key,d[key]]) not in count:#тогда проверяем, #что если ранее такая пара чисел не была в списке #P.S. d[key] - значение суммы делителей числа key это не только сумма делителей, # но и также второе число пары дружественных чисел count.append([key,d[key]])#то добавляем print(len(count),min(sum(x) for x in count if sum(x) % 2 == 0)) #вывод количества таких пар и минимальной чётной суммы таких пар
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 3*4?50, а количество четных цифр числа больше количества нечетных.
В ответ запишите одно число – количество найденных чисел.
t = [] for x in range(10**3, 10**7+1): s = str(x) cht = [int(i) for i in s if int(i) % 2 == 0] ncht = [int(i) for i in s if int(i) % 2 != 0] if (s[0] == ’3’) and (s[-2:] == ’50’) and (s[-4] == ’4’) and len(cht) > len(ncht): t.append(x) print(len(t))
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, являющимися полными квадратами, соответствующие маске 82??9* и имеющих более 25 делителей.
В ответ запишите найденные числа в порядке возрастания через пробел.
for x in range(10**4, 10**8+1): c = set() s = str(x) if x**0.5 == int(x**0.5): for i in range(1, int(x**0.5)+1): if x % i == 0 and s[:2] == ’82’ and s[4] == ’9’: c.add(i) c.add(x//i) if len(c) > 25: print(x)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих , найдите все числа, соответствующие маске 137?15*7*50, делящиеся на 178750 без остатка.
В ответ запишите пары найденных чисел в порядке возрастания через пробел: найденное число и частное от деления на 178750.
from fnmatch import fnmatch for x in range(137101250,10**12+1,178750): if fnmatch(str(x),’137?15*7*50’): print(x,x//178750)
Ошибка.
Попробуйте повторить позже
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, находящихся в интервале [], найдите все числа, соответствующие маске 16* и имеющих ровно 13 нетривиальных делителей.
В ответ запишите найденные числа в порядке возрастания через пробел.
for x in range(10**3, 10**6+1): c = set() s = str(x) if x**0.5 == int(x**0.5): for i in range(2, int(x**0.5)+1): if x % i == 0 and s[:2] == ’16’: c.add(i) c.add(x//i) if len(c) == 13: print(x)