Задание 25. Программирование. Обработка целочисленной информации. ЕГЭ 2024 по информатике
Средний процент выполнения: 40.2%
Ответом к заданию 25 по информатике может быть развернутый ответ (полная запись решения с обоснованием выполненных действий).
Задачи для практики
Задача 1
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательноcть.
Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 352*6?5*, являющиеся полными квадратами.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им квадратные корни.
Решение
for num in range(1, 1000000): num = str(num) fl = False for i in range(len(num)-2): if num[i] == '6' and num[i+2] == '5': fl = True if fl: num = int('352'+num) if int(num ** 0.5) ** 2 == num: print(num, num ** 0.5)
Или можно другое решение, на основе срезов:
for i in range(352605, 10 ** 9): if round(i ** 0.5) ** 2 == i: s = str(i) if s[:3] == '352' and '6' in s[3:-2] and '5' in s[4:] and s.index('6') + 2 == s.rindex('5'): print(i, round(i ** 0.5))
Хотите самое быстрое решение? Вы замечали, что все соседние полные квадраты отличаются друг от друга на нечётное число, при этом это строго возрастающая последовательность нечётных числе. Например, нам даны полные квадраты 1, 4, 9, 16, 25, 36, 49. Разность между ними будет: 3, 5, 7, 9, 11, 13. Правда интересная закономерность? На её основе можно сделать решение:
from fnmatch import fnmatch z = 1189 i = 352836 while i <= 10 ** 9: if fnmatch(str(i), '352*6?5*'): print(i, i ** 0.5) i += z z += 2
Ответ:
352500625 18775
352763524 18782
Задача 2
Назовём маской числа последовательность состоящую из цифр и символ «*» и «?»:
— символ «?» означает ровно одну пропущенную цифру;
— символ «*» означает любую последовательность цифр, включая пустую.
Среди натуральных чисел, больших 106, найдите пять чисел, соответствующие маске 123*4?*9 и делящиеся на 13 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на 13.
Решение
Запишем решение на языке Python:
k = 0 number = 10 ** 6 + 1 while k < 5: s =str(number) if s[:3] == '123' and s[-1] == '9' and '4' in s[3:-2] and number % 13 == 0: k += 1 print(number, number // 13) number += 1
1230489 94653
1232439 94803
1233479 94883
1234129 94933
1234259 94943
Задача 3
Дан числовой отрезок натуральных чисел: [47584, 47684]. Напишите программу, которая ищет на данном отрезке числа, являющиеся простыми. Простое число — число, которое делится только на единицу и само число.
Для каждого найденного числа запишите через пробел порядковый номер и само число. Каждая следующая найденная пара пишется с новой строки в порядке возрастания простого числа. Например, если подошло два числа: 7 и 13, необходимо записать в ответ:
1 7
2 13
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count == 2:
return max_del
else:
return -1
for x in range(47584, 47684 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
1 47591
2 47599
3 47609
4 47623
5 47629
6 47639
7 47653
8 47657
9 47659
10 47681
Задача 4
Дан числовой отрезок натуральных чисел: [10000, 14000]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно два чётных делителя, не считая самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший чётный делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1, 2):
if x % i == 0:
count += 1
max_del = i
if count > 2:
return -1
if count == 2:
return max_del
else:
return -1
for x in range(10000, 14000 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
10082 142
10658 146
12482 158
13778 166
Задача 5
Дан числовой отрезок натуральных чисел: [1574, 1600]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно шесть делителей, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count > 6:
return -1
if count == 6:
return max_del
else:
return -1
for x in range(1574, 1600 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Решение на C++:
int check(int val){
int count = 0, max = 0;
for (int i = 2; i <= val / 2; ++i)
if (val % i == 0){
count++;
max = i; // последний делитель - наибольший
}
if (count == 6)
return max;
return - 1;
}
int main(){
for (int i = 1574; i < 1601; ++i){
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}
Ответ:
1576 788
1578 789
1581 527
1582 791
1586 793
1592 796
1593 531
1595 319
1598 799
1599 533
Задача 6
Дан числовой отрезок натуральных чисел: [124503, 124563]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно шесть делителей, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count > 6:
return -1
if count == 6:
return max_del
else:
return -1
for x in range(124503, 124563 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Решение на C++:
int check(int val){
int count = 0, max = 0;
for (int i = 2; i <= val / 2; ++i)
if (val % i == 0){
count++;
max = i; // последний делитель - наибольший
}
if (count == 6)
return max;
return - 1;
}
int main(){
for (int i = 192; i <= 237; ++i){
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}
Ответ:
124503 41501
124505 24901
124510 62255
124514 62257
124518 62259
124522 62261
124534 62267
124538 62269
124552 62276
124554 62277
124555 24911
124562 62281
Задача 7
Дан числовой отрезок натуральных чисел: [48724, 48768]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно четыре делителя, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count > 4:
return -1
if count == 4:
return max_del
else:
return -1
for x in range(48724, 48768 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
48725 9745
48749 1681
48753 16251
Задача 8
Дан числовой отрезок натуральных чисел: [14587, 20598]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно три делителя, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count == 3:
return max_del
else:
return -1
for x in range(14587, 20598 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
14641 1331
Задача 9
Дан числовой отрезок натуральных чисел: [214, 8475]. Напишите программу, которая ищет на данном отрезке числа, у которых ровно три делителя, не считая единицы и самого числа.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 10 и 21, необходимо записать в ответ:
10 5
21 7
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def check_del(x):
max_del = 0
count = 0
for i in range(2, x//2+1):
if x % i == 0:
count += 1
max_del = i
if count == 3:
return max_del
else:
return -1
for x in range(214, 8475 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Ответ:
625 125
2401 343
Задача 10
Дан числовой отрезок натуральных чисел: [25, 8700]. Напишите программу, которая ищет на данном отрезке числа, у которых сумма делителей (кроме самого числа) равна самому числу.
Для каждого найденного числа запишите через пробел само число и наибольший делитель этого числа (кроме самого числа). Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 6 и 24, необходимо записать в ответ:
6 3
24 12
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Решение на Python:
def check_del(x):
s = 0
max_del = 0
for i in range(1, x//2+1):
if x % i == 0:
s += i
max_del = i
if s == x:
return max_del
else:
return -1
for x in range(25, 8500 + 1):
num = check_del(x)
if num != -1:
print(x, num)
Решение на C++:
int check(int val){
int sum = 0, max = 0;
for (int i = 1; i <= val / 2; ++i)
if (val % i == 0) {
sum += i;
if (i > max) max = i;
}
if (sum == val)
return max;
else
return -1;
}
int main() {
for (int i = 28; i < 8701; ++i) {
int rez = check(i);
if (rez != -1)
cout << i << " " << rez << endl;
}
return 0;
}
Ответы:
28 14
496 248
8128 4064
Задача 11
Дан числовой отрезок натуральных чисел: [178247500, 178543044]. Напишите программу, которая ищет на данном отрезке числа, являющиеся квадратами натуральных чисел.
Для каждого найденного числа запишите через пробел само число и квадратом какого числа оно является. Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 16 и 25, необходимо записать в ответ:
16 4
25 5
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def square(x):
num = int(x ** 0.5)
if num**2 == x:
return num
else:
return -1
for x in range(178247500, 178543044 + 1):
num = square(x)
if num != -1:
print(x, num)
Ответ:
178249201 13351
178275904 13352
178302609 13353
178329316 13354
178356025 13355
178382736 13356
178409449 13357
178436164 13358
178462881 13359
178489600 13360
178516321 13361
178543044 13362
Задача 12
Дан числовой отрезок натуральных чисел: [2147850, 2478350]. Напишите программу, которая ищет на данном отрезке числа, являющиеся кубами натуральных чисел.
Для каждого найденного числа запишите через пробел само число и кубом какого числа оно является. Каждая следующая найденная пара пишется с новой строки в порядке возрастания первого числа. Например, если подошло два числа: 27 и 8, необходимо записать в ответ:
8 2
27 3
В качестве ответа прикрепите код программы, а также ответ в формате, указанном ранее.
Решение
Напишем код, где в основной программе будет перебираться диапазон наших числах, а проверка условия будет осуществляться в отдельной функции. Пример программы на Python:
def cube(x):
num = 1
while num**3 < x:
num += 1
if num**3 == x:
return num
else:
return -1
for x in range(2147850, 2478350 + 1):
num = cube(x)
if num != -1:
print(x, num)
Ответ:
2197000 130
2248091 131
2299968 132
2352637 133
2406104 134
2460375 135