Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория / 2 / 01-CHICL.DOC
Скачиваний:
43
Добавлен:
30.04.2013
Размер:
60.42 Кб
Скачать

Нахождение делителей числа

Требуется найти и напечатать все делители целого числа N, включая 1 .

Число А является делителем числа В, если В делится на А нацело. Будем проверять, являются ли делителями исходного числа N любые числа начиная с двух и до Int(N/2), так как единица является делителем любого целого числа. Для проверки того, является ли число I делителем используют алгоритм, аналогичный алгоритму проверки четности.

Ввод N

C = Int(N/2)

Для I=2 до C

(Нет) N/I = Int(N/I) (Да)

Вывод I

Определяемые в программе значения делителей числа N не сохраняются. Чтобы их сохранить необходимо предусмотреть массив достаточно большого размера и после получения делителя пересылать его в очередной элемент массива:

Array D(100)

…………..

J=1; D(1)=1;

J=J+1; D(J)=I

Нахождение простых чисел Алгоритм "Решето Эратосфена"

Сущность этого алгоритма заключается в следующем. Зачеркивается единица. Число 2 - простое. Зачеркиваются все натуральные числа, делящиеся на 2. Число 3 - первое не зачеркнутое число - простое. Далее зачеркиваются все натуральные числа, которые делятся на 3. Число 5 - следующее не зачеркнутое число - будет простым. Продолжая аналогичные вычисления, можно найти сколь угодно большой отрезок последовательности простых чисел.

Для реализации этого алгоритма на ЭВМ формируют одномерный массив, в который помещают целые числа от 1 до М (значение элемента массива равно индексу элемента). Далее просматривают элементы массива, начиная с I=2, до М. Если А(I)¹0, то его значение выводится на печать, а весь "хвост" массива преобразуется. Это преобразование заключается в замене нулями элементов с индексами I+I, I+2·I и т.д. до конца массива, т.е. при I=2 обнуляют каждый второй элемент массива, начиная с четвертого, при I=3 - каждый третий, начиная с шестого и т.д. После этого I увеличивается на 1, и ищется следующий элемент массива, отличный от нуля.

Описание массива А

Ввод М

Для I=1 до М

А(I) = I

Вывод("Простые числа")

Для I=2 до М

(Нет) A(I)=0 (Да)

Вывод A(I)

C = I + I

Для J=C до М с шагом I

A(J)=0

Рассмотренный метод имеет ограниченное применение. Например, его использование нецелесообразно

- для определения, является ли натуральное число N простым;

- для поиска простых чисел в интервале от А до В;

- для определения простых чисел при больших значениях М из-за ограниченного объема оперативной памяти ЭВМ.

Другой алгоритм нахождения простых чисел

Этот алгоритм позволяет найти все простые числа в интервале от А до В .При этом используют тот факт, что если целое число I не имеет ни одного делителя в интервале от 2 до I, то это число I - простое. Для уменьшения объема вычислений простые числа в интервале от А до В следует искать среди нечетных чисел (если A>2). По этой же причине в качестве делителей числа I (IÎ[A,B]) используют только нечетные числа, начиная с 3 .Кроме этого, легко убедиться в том, что проверку достаточно осуществлять до Int(sqrt(I)), а не до I .

Ввод А,В ¬¾¾¾¾Ø ¬¾¾Ø

Если A £ 0 (Да) ¾¾¾¾û ½

(Нет) ½

Если A ³ B (Да) ¾¾¾¾¾¾¾¾¾û

(Нет)

Вывод("Простые числа от",А,"до",В)

Если A > 2 (Да) ¾¾¾¾¾¾¾¾¾Ø

(Нет) ½

Если A = 2 (Да) ¾¾¾Ø ½

(Нет) ½ ½

Вывод("1") ½ ½

А = А + 2 ½ ½

Вывод("2") ¬¾¾¾¾¾¾û ½

¬¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾û

Если A/2 ¹ Int(A/2) (Да) ¾¾¾Ø

(Нет) ½

А = А + 1 ½

Для I=A до B шаг 2 ¬¾¾¾¾¾¾¾û

C = Int(sqrt(I))

Для J=3 до С шаг 2

Если (I/J) = Int(I/J) (Да) ¾¾¾¾¾¾¾¾¾¾Ø

(Нет) ½

Проверка окончания цикла по J ½

Вывод I ½

Проверка окончания цикла по I ¬¾¾¾¾¾¾¾û

Соседние файлы в папке 2