
Нахождение делителей числа
Требуется найти и напечатать все делители целого числа 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 ¬¾¾¾¾¾¾¾û