Похожие презентации:
Маски и делители чисел №25
1.
маски и делители чисел№25
2.
пошагово разберём задачу на маски1
Назовём маской числа последовательность цифр, в которой также могут
встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в
том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Найдите все
натуральные числа, не превышающие 10^9, которые соответствуют маске 20*23 и
при этом без остатка делятся на 2023, а сумма цифр каждого такого числа кратна
7 и меньше 20.
В ответе запишите все найденные числа в порядке возрастания.
3.
11) Сначала импортируем модуль fnmatch из библиотеки fnmatch, чтобы
проверять число на соответствие маске:
from fnmatch import fnmatch
4.
12) Начинаем перебор чисел, минимальное число, которое удовлетворяет маске,
2023, оно уже кратно 2023, поэтому начинаем перебор с него с шагом 2023. Если
бы, к примеру, минимальное число было 2025, то чтобы найти минимальное
число кратное 2023 мы бы использовали конструкцию 2025 - 2025 % 2023.
from fnmatch import fnmatch
for i in range(2023, 10 ** 9, 2023):
5.
13) С помощью fnmatch проверяем число на маску и также записываем другие
условия на число, подходящие числа выводим:
from fnmatch import fnmatch
for i in range(2023, 10 ** 9, 2023):
if fnmatch(str(i), '20*23') and
sum(map(int, str(i))) % 7 == 0 and sum(map(int, str(i))) < 20:
print(i)
2023
ответ
204323
2025023
20232023
202302023
6.
маскипростые задачи:
2
3
4
уровень егэ:
5
6
7
7.
пошагово разберём задачу на делители1
Пусть М — сумма минимального и максимального натуральных делителей целого
числа, не считая единицы и самого числа. Если таких делителей у числа нет, то
значение М считается равным нулю.
Напишите программу, которая перебирает целые числа, большие 800 000, в
порядке возрастания и ищет среди них такие, для которых значение М
оканчивается на 4. В ответе запишите в первом столбце таблицы первые пять
найденных чисел в порядке возрастания, а во втором столбце - соответствующие
им значения M.
Например, для числа 20 M = 2 + 10 = 12.
8.
11) Сначала создаём функцию для поиска делителей числа, создаём
множество, в которое будем добавлять найденные делители:
def f(x):
a = set()
9.
12) В данном задании единицу и само число не нужно учитывать в качестве
делителей, поэтому начинаем перебор с 2-ух, до корня числа x включительно:
def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
10.
13) Если i является делителем числа x, тогда и число x // i будет являться
делителем, поэтому оба эти числа добавляем в множество:
def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
11.
14) Так как нам нужны минимальный и максимальный делители, то сначала
преобразуем множество в отсортированный список:
def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
a = sorted(list(a))
12.
15) Если в списке есть числа, тогда возвращаем сумму минимального и
максимального чисел, в ином случае возвращаем 0
def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
a = sorted(list(a))
if len(a) != 0:
return a[0] + a[-1]
else:
return 0
13.
16) Теперь перебираем числа и проверяем, что значение функции
оканчивается на 4:
def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
a = sorted(list(a))
if len(a) != 0:
return a[0] + a[-1]
else:
return 0
for i in range(800001, 10 ** 20):
if f(i) % 10 == 4:
print(i, f(i))
14.
17) Добавим счётчик для количества выведенных чисел, увеличиваем его когда
выводим число и прерываем перебор, когда выведем 5 чисел:
def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
a = sorted(list(a))
if len(a) != 0:
return a[0] + a[-1]
else:
return 0
counter = 0
for i in range(800001, 10 ** 20):
if f(i) % 10 == 4:
print(i, f(i))
counter += 1
if counter == 5:
break
ответ
800004 400004
800009 114294
800013 266674
800024 400014
800033 61554
15.
делителипростые задачи:
2
3
4
уровень егэ:
5
6
7
16.
+1 номер в нашей копилкеидем отдыхать?
17.
2Назовём маской числа последовательность цифр, в которой также могут
встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в
том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 10^6, найдите все числа,
соответствующие маске 1*578*, делящиеся на 83 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке
возрастания, а во втором столбце – соответствующие им результаты деления этих
чисел на 83.
пояснение
18.
2from fnmatch import fnmatch
for i in range(1578 - 1578 % 83, 10 ** 6, 83):
if fnmatch(str(i), '1*578*'):
print(i, i // 83)
ответ
115785
1395
135788
1636
146578
1766
157866
1902
19.
3Назовём маской числа последовательность цифр, в которой также могут
встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в
том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 10^10, найдите все числа,
соответствующие маске 21?3*145?5 и делящиеся на 2025 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке
возрастания, а во втором столбце – соответствующие им результаты деления этих
чисел на 2025.
пояснение
20.
3from fnmatch import fnmatch
for i in range(210314505 - 210314505 % 2025, 10 ** 10, 2025):
if fnmatch(str(i), '21?3*145?5'):
print(i, i // 2025)
ответ
2123214525 1048501
2163714525 1068501
2173114575 1073143
21.
4Назовём маской числа последовательность цифр, в которой также могут
встречаться следующие символы:
1. символ «?» означает ровно одну произвольную цифру;
2. символ «*» означает любую последовательность цифр
произвольной длины; в том числе «*» может задавать и пустую
последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди
натуральных чисел, не превышающих 10^10, найдите все числа,
соответствующие маске 5?2*3?3?, делящиеся на 98591 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке
возрастания, а во втором столбце – соответствующие им результаты деления этих
чисел на 98591.
Количество строк в таблице для ответа избыточно.
пояснение
22.
4from fnmatch import fnmatch
for i in range(5023030 - 5023030 % 98591, 10 ** 10, 98591):
if fnmatch(str(i), '5?2*3?3?'):
print(i, i // 98591)
ответ
52253230 530
5024493133 50963
5125253135 51985
5226013137 53007
5326773139 54029
5524053730 56030
5624813732 57052
5725573734 58074
5826333736 59096
5927093738 60118
23.
5Назовём маской числа последовательность цифр, в которой также могут
встречаться следующие символы:
- символ «?» означает ровно одну произвольную цифру;
- символ «*» означает любую последовательность цифр произвольной длины; в
том числе «*» может задавать и пустую последовательность.
Например, маске 13*4?5 соответствуют числа 13405 и 1300425.Найдите все
натуральные числа меньшие 10^8, которые кратны 237, соответствуют маске
«81?2*80», но не соответствуют маске «*9*».
В ответ в первом столбике перечислите все найденные числа в порядке
возрастания, а во втором столбце – соответствующие им результаты деления этих
чисел на 237.Количество строк в таблице для ответа может быть избыточным.
пояснение
24.
5from fnmatch import fnmatch
for i in range(810280 - 810280 % 237, 10 ** 8, 237):
if fnmatch(str(i), '81?2*80') and not fnmatch(str(i), '*9*'):
print(i, i // 237)
815280 3440
ответ
8162280 34440
81324180 343140
81727080 344840
81821880 345240
25.
6Назовём маской числа последовательность цифр, в которой также могут
встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в
том числе «*» может задавать и пустую последовательность.
Напишите программу, которая ищет среди целых чисел, превышающих 320400,
первые пять чисел, которые делятся на все чётные числа, соответствующие маске
1?.
В ответе запишите в первом столбце таблицы все найденные числа в порядке
возрастания, а во втором столбце — соответствующие им частные от деления на
максимальное из чётных чисел, соответствующие маске 1?.
пояснение
26.
6counter = 0
for i in range(320401, 10 ** 20):
if all(i % x == 0 for x in range(10, 20, 2)):
print(i, i // 18)
counter += 1
if counter == 5:
break
322560 17920
ответ
327600 18200
332640 18480
337680 18760
342720 19040
27.
7Назовём маской числа последовательность цифр, в которой также
могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «#» означает любую последовательность чётных цифр произвольной
длины; в том числе «#» может задавать и пустую последовательность.
Например, маске 123#4?5 соответствуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 10^10, найдите все числа,
соответствующие маске 1592#6?8 и делящиеся на 1996 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке
возрастания, а во втором столбце – соответствующие им результаты деления этих
чисел на 1996.
пояснение
28.
7from itertools import product
for i in range(4):
for a in product('02468', repeat = i):
x = ''.join(a)
for y in range(10):
numb = int(f'1592{x}6{y}8')
if numb % 1996 == 0:
print(numb, numb // 1996)
1592464688 797828
ответ
1592484648 797838
29.
2Пусть S – сумма всех делителей целого числа.
Например, для числа 12 значение S=1+2+3+4+6+12=28.
Напишите программу, которая перебирает все четырёхзначные натуральные
числа, и ищет среди них такие, для которых S оканчивается на 23. В ответе
запишите в первом столбце таблицы все найденные числа в порядке
возрастания, а во втором столбце – соответствующие им значения S.
пояснение
30.
2def f(x):
a = set()
for i in range(1, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
return sum(list(a))
for i in range(1000, 10000):
if f(i) % 100 == 23:
print(i, f(i))
1681 1723
ответ
1936 4123
2592 7623
3025 4123
6962 10623
7569 11323
31.
3Пусть M – сумма минимального и максимального натуральных делителей целого
числа, не считая единицы и самого числа. Если таких делителей у числа нет, то
считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, бо́льшие 900 000, в
порядке возрастания и ищет среди них такие, для которых
M оканчивается на 46. В ответе запишите в первом столбце таблицы первые
пять найденных чисел в порядке возрастания, а во втором столбце –
соответствующие им значения M.
пояснение
32.
3def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
if len(a) == 0:
return 0
else:
return min(a) + max(a)
counter = 0
for i in range(900001, 10 ** 20):
if f(i) % 100 == 46:
print(i, f(i))
counter += 1
if counter == 5:
break
ответ
900029 69246
900088 450046
900129 300046
900205 180046
900288 450146
33.
4Напишите программу, которая ищет среди целых чисел, превышающих 136179,
первые четыре числа, удовлетворяющих условию: сумма всех различных
делителей числа, отличных от 1 и самого числа, при делении на 385 даёт
остаток 91.
В ответе запишите эти четыре пары чисел в порядке возрастания первого числа
в паре: число и сумму его различных делителей (исключая 1 и само число).
пояснение
34.
4def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
return sum(a)
counter = 0
for i in range(136180, 10 ** 20):
if f(i) % 385 == 91:
print(i, f(i))
counter += 1
if counter == 4:
break
136968 232631
ответ
137126 97881
137255 29736
138778 69391
35.
5Напишите программу, которая перебирает целые числа, большие 700 000, в
порядке возрастания и ищет среди них такие, у которых есть натуральный
делитель, оканчивающийся на цифру 7 и не равный ни самому числу, ни числу 7.
Выведите первые пять найденных чисел и для каждого - соответствующий
наименьший делитель, оканчивающийся на цифру 7, не равный ни самому
числу, ни числу 7.
Формат вывода: для каждого из пяти найденных чисел в отдельной строке
сначала выводится само число, затем - значение наименьшего делителя,
оканчивающегося на цифру 7, не равного ни самому числу, ни числу 7.
Строки выводятся в порядке возрастания найденных чисел.
пояснение
36.
5def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
if i != 7 and i % 10 == 7:
a.add(i)
if (x//i) != 7 and (x//i) % 10 == 7:
a.add(x // i)
return sorted(list(a))
counter = 0
for i in range(700001, 10 ** 20):
if len(f(i)) != 0:
print(i, f(i)[0])
counter += 1
if counter == 5:
break
700002 27
ответ
700003 37
700005 6087
700007 77
700008 29167
37.
6Напишите программу, которая перебирает целые числа, бо́льшие 1 000 000, в
порядке возрастания и ищет среди них те, которые имеют ровно 3 простых
делителя.
В ответе запишите 5 наименьших таких чисел в порядке возрастания. Справа от
каждого такого числа укажите его наибольший простой делитель.
пояснение
38.
6def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
if check(i):
a.add(i)
if check(x // i):
a.add(x // i)
return sorted(list(a))
def check(x):
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
return False
return True
counter = 0
for i in range(1000001, 10 ** 20):
if len(f(i)) == 3:
print(i, f(i)[-1])
counter += 1
if counter == 5:
break
1000002 166667
ответ
1000004 89
1000006 71429
1000012 19231
1000013 383
39.
7Напишите программу, которая ищет среди целых чисел, принадлежащих
числовому отрезку [321654; 654321], числа у которых есть только нечетные
делители, количество которых больше 70. Делители 1 и само число не
учитываются. Для каждого найденного числа запишите само число и
максимальный по величине делитель.
Например, для числа 15 имеем делители 3 и 5. Поэтому результатом (не
принимая во внимание количества делителей) будет пара чисел
15 5
пояснение
40.
7def f(x):
a = set()
for i in range(2, int(x ** 0.5) + 1):
if x % i == 0:
a.add(i)
a.add(x // i)
return sorted(list(a))
for i in range(321655, 654321, 2):
if len(f(i)) > 70:
print(i, f(i)[-1])
405405 135135
ответ
530145 176715
592515 197505
626535 208845
Программирование