Обработка целочисленной информации. Решаем задачи ЕГЭ № 25

Содержание

Слайд 2

Спецификация задач: задача №25 Новые задачи 2021 года Умение создавать собственные

Спецификация задач: задача №25

Новые задачи 2021 года
Умение создавать собственные программы

для обработки целочисленной информации
Содержание: Цепочки (конечные последовательности), деревья, списки, графы, матрицы (массивы), псевдослучайные последовательности
Умение: Строить информационные модели объектов, систем и процессов в виде алгоритмов
Уровень сложности: высокий
Примерное время выполнения: 35 минут
Слайд 3

Решение задач № 25 (ДЕМО-2021)

Решение задач № 25 (ДЕМО-2021)

Слайд 4

Решение через нахождение количества и печать: Python (без функций) for number

Решение через нахождение количества и печать: Python (без функций)

for number in

range(174457, 174505+1):
cnt = 0
for i in range(2, number):
if number % i == 0:
cnt += 1
if cnt == 2:
for i in range(2, number):
if number % i == 0:
print(i, end = ' ')
print()
Слайд 5

Решение через нахождение количества и печать: Python (с функциями) def divCount(number):

Решение через нахождение количества и печать: Python (с функциями)

def divCount(number):
cnt

= 0
for i in range(2, number):
if number % i == 0:
cnt += 1
return cnt
def divPrint(number):
for i in range(2, number):
if number % i == 0:
print(i, end = ' ')
print()
for k in range(174457, 174505+1):
if divCount(k) == 2:
divPrint(k)
Слайд 6

Решение через нахождение количества и печать: C++ (без функций) #include using

Решение через нахождение количества и печать: C++ (без функций)

#include
using namespace

std;
int main() {
for(int number = 174457; number <= 174505; number++){
int cnt = 0;
for(int i = 2; i < number; i++)
if (number % i == 0)
cnt += 1;
if (cnt == 2){
for(int i = 2; i < number; i++)
if (number % i == 0)
cout << i << ' ';
cout << endl;
}
}
return 0;
}
Слайд 7

Решение через нахождение количества и печать: C++ (с функциями) #include using

Решение через нахождение количества и печать: C++ (с функциями)

#include
using namespace

std;
int divCount(int number){
int cnt = 0;
for(int i = 2; i < number; i++)
if (number % i == 0)
cnt += 1;
return cnt;
}
void divPrint(int number){
for(int i = 2; i < number; i++)
if (number % i == 0)
cout << i << ' ';
cout << endl;
}
int main() {
for(int k = 174457; k <= 174505; k++)
if (divCount(k) == 2)
divPrint(k);
return 0;
}
Слайд 8

Решение через нахождение количества и печать: Pascal (без функций) var number,

Решение через нахождение количества и печать: Pascal (без функций)

var number, cnt,

i: integer;
begin
for number := 174457 to 174505 do
begin
cnt := 0;
for i := 2 to number-1 do
if number mod i = 0 then
cnt := cnt + 1;
if cnt = 2 then
begin
for i := 2 to number-1 do
if number mod i = 0 then
write(i, ' ');
writeln;
end;
end;
end.
Слайд 9

Решение через нахождение количества и печать: Pascal (с функциями) function divCount(number:

Решение через нахождение количества и печать: Pascal (с функциями)

function divCount(number: integer):

integer;
var cnt, i: integer;
begin
cnt := 0;
for i := 2 to number-1 do
if number mod i = 0 then
cnt := cnt + 1;
divCount := cnt;
end;
procedure divPrint(number: integer);
var i: integer;
begin
for i := 2 to number-1 do
if number mod i = 0 then
write(i, ' ');
writeln;
end;
var k, r: integer;
begin
for k := 174457 to 174505 do
if divCount(k) = 2 then
divPrint(k);
end.
Слайд 10

Решение через динамические структуры данных: Python def dividers(number): d = []

Решение через динамические структуры данных: Python

def dividers(number):
d = []
for

i in range(2, number):
if number % i == 0:
d.append(i)
return d
for i in range(174457, 174505+1):
divs = dividers(i)
if (len(divs) == 2):
print(divs)
Слайд 11

#include #include using namespace std; vector dividers(int number){ vector d; for(int

#include
#include
using namespace std;
vector dividers(int number){
vector d;
for(int i = 2;

i < number; i++){
if (number % i == 0){
d.push_back(i);
}
}
return d;
}
int main() {
for(int i = 174457; i <= 174505; i++){
vector divs = dividers(i);
if (divs.size() == 2){
for(int elem : divs){
cout << elem << ' ';
}
cout << endl;
}
}
return 0;
}

Решение через динамические структуры данных: С++

Слайд 12

Решение через динамические структуры данных: С++ #include #include using namespace std;

Решение через динамические структуры данных: С++

#include
#include
using namespace std;
vector dividers(int

number){
vector d;
for(int i = 2; i < number; i++){
if (number % i == 0){
d.push_back(i);
}
}
return d;
}
int main() {
for(int i = 174457; i <= 174505; i++){
vector divs = dividers(i);
if (divs.size() == 2){
cout << divs[0] << ' ' << divs[1] << endl; }
}
return 0;
}
Слайд 13

Решение через динамические структуры данных: Pascal function dividers(number: integer): List ;

Решение через динамические структуры данных: Pascal

function dividers(number: integer): List;
var
d: List

:= nil;
i: integer;
begin
d := new List;
for i := 2 to number - 1 do
if (number mod i = 0) then
begin
d := d + Lst(i);
end;
dividers := d;
end;
var
divs: List := nil;
i: integer;
begin
divs := new List;
for i := 174457 to 174505 do
begin
divs := dividers(i);
if (divs.Count = 2) then
writeln(divs);
end;
end.
Слайд 14

Задание демоварианта - 2022

Задание демоварианта - 2022

Слайд 15

Задание демоварианта - 2022

Задание демоварианта - 2022

Слайд 16

Другие варианты заданий № 25 Другое количество делителей, например, 6 Pascal:

Другие варианты заданий № 25

Другое количество делителей, например, 6
Pascal: if divCount(k)

= 6 then, if (divs.Count = 6) then
Python: if divCount(k) == 6:, if (len(divs) == 6):
C++: if (divCount(k) == 6), if (divs.size() == 6)
Указанное количество чётных / нечётных делителей:
При решении через функцию нахождения количества при нахождении количества делителей проверять делители на чётность / нечётность
При решении через динамические структуры данных записывать в динамическую структуру (список / вектор) только чётные / нечётные делители
Задание: измените программы для вывода нечётных делителей чисел отрезка [174457, 174505], имеющих ровно 6 нечётных делителей.
Подсказка: должна получиться 1 строка при выводе, учитываются все делители.
Слайд 17

Выполнение задания на Pascal (функции) function divCount(number: integer): integer; var cnt,

Выполнение задания на Pascal (функции)

function divCount(number: integer): integer;
var
cnt, i: integer;
begin

cnt := 0;
for i := 1 to number do
if (number mod i = 0) and (i mod 2 = 1) then
cnt := cnt + 1;
divCount := cnt;
end;
procedure divPrint(number: integer);
var
i: integer;
begin
for i := 1 to number do
if (number mod i = 0) and (i mod 2 = 1) then
write(i, ' ');
writeln;
end;
var
k, r: integer;
begin
for k := 174457 to 174505 do
if divCount(k) = 6 then
divPrint(k);
end.
Слайд 18

Выполнение задания на Python (структуры) def dividers(number): d = [] for

Выполнение задания на Python (структуры)

def dividers(number):
d = []
for i

in range(1, number + 1):
if number % i == 0 and i % 2 == 1:
d.append(i)
return d
for i in range(174457, 174505+1):
divs = dividers(i)
if (len(divs) == 6):
print(divs)
Слайд 19

Другие варианты заданий № 25 Поиск числа, имеющего максимальное количество делителей

Другие варианты заданий № 25

Поиск числа, имеющего максимальное количество делителей
def divCount(number):

cnt = 0
for i in range(1, number + 1):
if number % i == 0:
cnt += 1
return cnt
def divPrint(number):
for i in range(1, number + 1):
if number % i == 0:
print(i, end = ' ')
print()
# находим максимальное кол-во делителей
maxDivCount = 0
for k in range(174457, 174505+1):
if maxDivCount < divCount(k):
maxDivCount = divCount(k)
print("Max dividers count:", maxDivCount)
# печатаем числа и их делители
for k in range(174457, 174505+1):
if maxDivCount == divCount(k):
print(k, end = ': ')
divPrint(k)
Слайд 20

Другие варианты заданий № 25 Нахождение простых чисел в диапазоне: Python

Другие варианты заданий № 25

Нахождение простых чисел в диапазоне: Python
def isPrime(number):

prime = True
for i in range(2, number):
if number % i == 0:
prime = False
break
return prime
for i in range(174457, 174505+1):
if isPrime(i):
print(i)
Слайд 21

Другие варианты заданий № 25 Нахождение простых чисел в диапазоне: C++

Другие варианты заданий № 25

Нахождение простых чисел в диапазоне: C++
#include
using

namespace std;
bool isPrime(int number){
bool prime = true;
for(int i = 2; i < number; i++){
if (number % i == 0){
prime = false;
break;
}
}
return prime;
}
int main() {
for(int i = 174457; i <= 174505; i++){
if (isPrime(i))
cout << i << endl;
}
return 0;
}
Слайд 22

Другие варианты заданий № 25 Нахождение простых чисел в диапазоне: Pascal

Другие варианты заданий № 25

Нахождение простых чисел в диапазоне: Pascal
function isPrime(number:

integer): boolean;
var
i: integer;
prime: boolean;
begin
prime := true;
for i := 2 to number-1 do
if number mod i = 0 then
begin
prime := false;
end;
isPrime := prime;
end;
var
k, r: integer;
begin
for k := 174457 to 174505 do
if isPrime(k) then
writeln(k);
end.
Слайд 23

Другие варианты заданий № 25 Задание: найдите количество пар простых чисел-близнецов

Другие варианты заданий № 25

Задание: найдите количество пар простых чисел-близнецов в

диапазоне [100000, 101000]. Выведите числа каждой пары и количество пар.
Числа-близнецы – пары простых чисел, отличающихся на 2.
Реализация алгоритма 1: записать в динамическую структуру данных все простые числа в заданном диапазоне, подсчитать количество пар, для которых разность чисел равна 2.
Реализация алгоритма 2: проверять на простоту числа i и i+2, если оба числа простые, изменять счётчик количества пар.
Слайд 24

Числа-близнецы (алгоритм 1) def isPrime(number): prime = True for i in

Числа-близнецы (алгоритм 1)

def isPrime(number):
prime = True
for i in range(2,

number):
if number % i == 0:
prime = False
break
return prime
a = []
for i in range(100000, 101000+1):
if isPrime(i):
a.append(i)
cnt = 0
for i in range(0, len(a) - 1):
if a[i+1] - a[i] == 2:
print(a[i], a[i+1])
cnt += 1
print(cnt)
Слайд 25

Числа-близнецы (алгоритм 2) def isPrime(number): prime = True for i in

Числа-близнецы (алгоритм 2)

def isPrime(number):
prime = True
for i in range(2,

number):
if number % i == 0:
prime = False
break
return prime
cnt = 0
for i in range(100000, 101000+1-2):
if isPrime(i) and isPrime(i+2):
print(i, i+2)
cnt += 1
print(cnt)
Слайд 26

Другие варианты заданий № 25 Поиск наибольшего общего делителя, наименьшего общего

Другие варианты заданий № 25

Поиск наибольшего общего делителя, наименьшего общего кратного
Наибольший

общий делитель чисел a и b – наибольшее число, которое делит a и b без остатка
Наименьшее общее кратное чисел a и b – наименьшее число, которое делится на a и b без остатка
nok = min(a, b)
while(True):
if nok % a == 0 and nok % b == 0:
break
nok += 1
print(nok)
Слайд 27

Другие варианты заданий № 25 Задание: выведите числа в диапазоне [100,

Другие варианты заданий № 25

Задание: выведите числа в диапазоне [100, 1000],

имеющие в качестве наибольшего общего делителя с числом 310 число 31.
Ответ:
217
279
341
403
527
589
651
713
837
899
961
Слайд 28

Другие варианты заданий № 25 Перевод в другие системы счисления Пример:

Другие варианты заданий № 25

Перевод в другие системы счисления
Пример: подсчёт количества

нулей и единиц в двоичной записи числа
number = 22 # Здесь может быть ввод данных
cnt0 = 0
cnt1 = 0
while number > 0:
digit = number % 2
if digit == 0:
cnt0 += 1
if digit == 1:
cnt1 += 1
number = number // 2
print("Количество 0 =", cnt0)
print("Количество 1 =", cnt1)