Решение задач целочисленной арифметики (поиск делителей и простых чисел)
Составление структурных программ для решения практических задач по теме "Целочисленная арифметика". Алгоритм нахождения делителей натурального числа, алгоритм проверки простое ли число, алгоритм Решета Эратосфена. Система программирования Free Pascal.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | разработка урока |
Язык | русский |
Дата добавления | 03.09.2014 |
Размер файла | 27,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Факультативное занятие по теме
«Решение задач целочисленной арифметики (поиск делителей и простых чисел)»
целочисленная арифметика программа программирование
Цель урока:
Ш закрепление материала предыдущего урока;
Ш формирование навыков и умений составления структурных программ для решения практических задач по теме «целочисленная арифметика»;
Ш развитие познавательного интереса, логического и алгоритмического мышления, навыков самоконтроля, ответственности, внимания.
Ш освоение различных методов решения задач, реализуемых на языке программирования
Ш углубить знания, умения и навыки решения задач по программированию и алгоритмизации.
Тип урока: урок усвоения новых знаний.
Учащиеся должны знать: алгоритм нахождения делителей натурального числа, алгоритм проверки простое ли число, алгоритм Решета Эратосфена
Учащиеся должны уметь: выполнять практические задачи с использованием изученных алгоритмов
Программное и методическое обеспечение урока: система программирования Free Pascal, интернет на ученических компьютерах
Техническое обеспечение урока: компьютеры
Ход урока
1. Проверка и закрепление знаний и умений предыдущего урока
К доске вызываю два человека написать решение домашних задач:
1) Сайт acmp.ru №383 «Красивые числа-2»
Будем называть число красивым, если сумма его цифр делится на количество цифр в нем. Необходимо найти N-ое в порядке возрастания красивое число. (1 <= N <= 100 000)
Пример ввода: |
Пример вывода: |
|
1 |
1 |
|
15 |
20 |
2) Сайт dl.gsu.by раздел «Методы алгоритмизации» задача «Взаимно простые тройки»
Дано N различных чисел. Определить какое количество троек из этого набора являются попарно взаимно простыми.
Формат ввода:
N - количество чисел. 1<=N<=100
Последовательность из N чисел . 2<=A[i]<=1000
Пример ввода: |
Пример вывода: |
|
5 |
2 |
С остальными учащимися провожу фронтальный опрос по теме предыдущего занятия:
- Какие числа называют четными? Нечетными? Как написать в команде ветвления условие проверки на четность?
- Что называется наибольшим общим делителем двух натуральных чисел. Рассказать функцию нахождения НОД двух чисел.
- Какие числа называют взаимно-простыми?
- Какое число называют кратным данного числа? Как получить наименьшее общее кратное двух
чисел?
- Как в программе найти сумму цифр натурального числа и количество цифр?
Выясняю, прошли ли у учащихся в домашнем задании все тесты. Обсуждаем правильность выполнения домашнего задания (на доске), выявляем проблемы, с которыми столкнулись учащиеся при выполнении домашнего задания. Даю рекомендации по их устранению.
2. Актуализация знаний учащихся на изучение учебного материала. Объяснение нового материала. Составление и реализация алгоритмов (метод проблемного изложения в сочетании с частично-поисковым методом, фронтальная форма работы)
- Что называют делителем числа? Как найти все делители натурального числа?
Задача1. Найти все делители натурального числа X (1<X ? 109).
Обычно ребята предлагают нерациональный алгоритм, который записываем и разбираем его недостатки:
Write (1, ` `, x);
For d:=2 to x div 2 do
if x mod d = 0 then write (` `, d);
- Какова сложность выполнения данного алгоритма? Успеет ли он при X=109 за 1 секунду найти все делители? (Ответ: О(X/2), не успеет).
- Как усовершенствовать алгоритм?
- Заметим особенность, что все делители у целого числа парные. Выпишем все пары делителей, например у числа 100:
1, 100 2, 50 4, 25 5, 20 10, 10
Сделаем вывод, что искать делители у числа нужно только до его корня.
write (1, ` `,x );
d:=2;
while int64(d)*d < x do begin
if x mod d = 0 then write (` `, d, ` `, x div d);
d:=d+1;
end;
if int64(d)*d=x then write (` `, d);
- Какова теперь сложность выполнения данного алгоритма? Успеет ли он при X=109 за 1 секунду найти все делители? (Ответ: ), успеет за 1 сек.)
- Какие числа называются простыми? Какие составными?
- Как определить простое ли число?
Задача2. Составить функцию, определяющую является ли натуральное число X простым? (1?X?109)
Ребята обычно предлагают воспользоваться Задачей 1, подсчитав количество делителей. Предлагаю найти пути усовершенствования алгоритма. Замечаем, что:
а) простое число не может быть четным (за исключением 2),
б) нечетное число не может иметь четных делителей,
в) если нашли хоть один делитель, то число - составное и можно остановить цикл.
Учитывая замечания, составляем функцию:
Function Prost (x: longint): boolean;
Var d: longint;
Begin
If x mod 2 =0 then Prost:=(x=2)
else begin
d:=3;
while (int64(d)*d<=x) and (x mod d <> 0) do
d:= d+2;
Prost:= (int64(d)*d > x) and (x<> 1);
end;
end;
- Как найти все простые числа на заданном целочисленном промежутке?
Задача3. Найти все простые числа на промежутке от 2 до N (N?106).
Ребята обычно предлагают в цикле воспользоваться функцией Prost из Задачи2. Выясняем сложность такого алгоритма: N*. При N=106 получим 1 млрд. действий. Следовательно, надо искать более быстрое решение.
- Слышал ли кто-нибудь из вас о Решете Эратосфена?
Выписываю на доске в ряд все числа от 1 до 27 и показываю принцип Решета:
вычеркиваю 1, вычеркиваю все числа кратные 2, кратные 3, кратные 5 (кроме их самих). Остались только простые числа на доске. Составляем программу:
p[1]:=false;
for i:=2 to N do p[i]:=true;
i:=2;
while int64(i)*i<=N do begin
if p[i] then begin j:= int64(i)*i;
while j<=N do begin
p[j]:= false; j:=j+i;
end;
end;
if i=2 then i:=3 else i:=i+2;
end;
for i:=2 to N do if p[i] then write (i, ` `);
- В высшей математике доказано, что сложность алгоритма: N*log2 (log2N), значит при N=106 получаем 4,5 млн. действий и успеем за 1 сек найти ответы.
3. Закрепление нового материала (репродуктивный метод обучения, индивидуальная форма работы).
Самостоятельная работа в тестирующей системе. Учащимся предлагается загрузить систему программирования Free Pascal, зайти на сайт acmp.ru, самостоятельно составить и отослать на проверку в тестирующую систему программу для решения Задачи под № 349.
Задача (№ 349). Найти все простые числа от M до N. (2 <= M <= N <= 106)
Делю учащихся на два варианта и предлагаю решить задачу при помощи функции Prost и при помощи Решета Эратосфена.
4. Подведение итогов урока. Рефлексия.
Выясняю, сколько времени выполнялась программа задачи № 349 каждым из способов.
- Во сколько раз алгоритм Решета Эратосфена оказался быстрее, чем использование функции Prost?
- Какие новые алгоритмы сегодня вы узнали на уроке? Расскажите основную идею этих алгоритмов.
Домашнее задание:
1) Повторить алгоритмы: НОД, нахождение делителей, определения простое ли число, алгоритм Решета Эратосфена;
2) на сайте acmp.ru сдать № 60 (Сверхпростое число), № 171 (Количество делителей).
Учитель информатики Лактина В.П.
Витебск, 2013г.
Размещено на Allbest.ru
Подобные документы
История появления и распространения Turbo Pascal - среды разработки для языка программирования Паскаль. Общий вид объявления файлового типа. Входная, выходная и промежуточная информация. Алгоритм решения задачи: словесный алгоритм, блок-схема, программа.
курсовая работа [359,4 K], добавлен 05.01.2010Поиск взаимно простых чисел. Алгоритм Евклида для целых чисел. Описание выбранного языка программирования. Алгоритм решения задачи. Обзор средств программирования. Текст и описание программы. Руководство оператора, программа и методика испытаний.
курсовая работа [843,5 K], добавлен 15.06.2011Постановка задач линейного программирования. Примеры экономических задач, сводящихся к задачам линейного программирования. Допустимые и оптимальные решения. Алгоритм Флойда — алгоритм для нахождения кратчайших путей между любыми двумя узлами сети.
контрольная работа [691,8 K], добавлен 08.09.2010Задачи, решаемые методом динамического программирования. Основные этапы нахождения деревянного алгоритма решения задачи. Выполнение алгоритма Прима. Построение Эйлерового цикла. Решение задач средствами Excel. Алгоритм основной программы - Derevo.
курсовая работа [586,3 K], добавлен 04.04.2015Этапы подготовки и решения реальных задач. Словесно-формульное, графическое описание, псевдокоды. Программа нахождения квадрата числа на языке Бейсик. Разветвляющийся и циклический алгоритм. Общие положения программирования. Базовые конструкции.
презентация [308,3 K], добавлен 31.10.2016Разработана программа решения двух задач на языке программирования Turbo Pascal. Спецификация задания. Описание входных и выходных данных. Математическая постановка задачи. Алгоритм ее решения. Описание и блок-схема программы. Результаты тестирования.
курсовая работа [275,8 K], добавлен 28.06.2008Использование информационных технологий для решения транспортных задач. Составление программ и решение задачи средствами Pascal10; алгоритм решения. Работа со средствами пакета Microsoft Excel18 и MathCad. Таблица исходных данных, построение диаграммы.
курсовая работа [749,1 K], добавлен 13.08.2012Теория графов и её применения. Разработка программного продукта для решения задач нахождения минимального пути. Анализ надежности и качества ПП "метода Дейкстры". Математическая модель задачи. Алгоритмы Дейкстры на языке программирования Turbo Pascal.
курсовая работа [1,6 M], добавлен 26.03.2013Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.
контрольная работа [831,0 K], добавлен 24.11.2013Факторизация натурального числа. Метод квадратичного решета. Факторизация с помощью эллиптических кривых. Реализация алгоритмов натуральных чисел и оценка их эффективности. Применение алгоритмов факторизации натуральных чисел в программной среде Maple.
курсовая работа [851,6 K], добавлен 25.06.2013