Задание 25. Программирование. Обработка целочисленной информации. ЕГЭ 2024 по информатике

Задание 25. Программирование. Обработка целочисленной информации. ЕГЭ 2024 по информатике

За это задание ты можешь получить 1 балл. На решение дается около 30 минут. Уровень сложности: высокий.
Средний процент выполнения: 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

Ответ: