Подход грубой силы состоит в том, чтобы разделить n на каждое число от 2 до n-1, и если оно делится, то n является «не простым», в противном случае — «простым».
Однако после √n никакое число не делит n. Следовательно, эффективно делить n на числа от 2 до √ n, что уменьшает количество операций.
Алгоритм: Пусть n — целое число.
- Шаг 1. Инициализируйте переменную c = 2 и s = √n.
- Шаг 2. Если c‹=s, перейдите к шагу 3, иначе — к шагу 5.
- Шаг 3. Если n%c == 0, прервите работу и перейдите к шагу 5, иначе перейдите к шагу 4.
- Шаг 4: c = c+1, переход к шагу 2.
- Шаг 5. Если c › √n, то «Prime», иначе «Not Prime».
Пример:
1) n = 6 , Целое число( √ 6) = Целое число(2,44) = 2
Шаг 1: c = 2 и s = 2
Итерация 1:
- Шаг 2: c‹=s, т. е. 2 ‹= 2, перейдите к шагу 3.
- Шаг 3: n%c = 6%2 == 0, поэтому перейдите к шагу 5.
- Шаг 5: c = s(2=2), затем «Не основной».
2) n = 17, Целое число( √ 17) = Целое число(4.12) = 4
Шаг 1: c = 2 и s = 4
Итерация 1:
- Шаг 2: c‹=s, т.е. 2 ‹= 4, перейдите к шагу 3.
- Шаг 3: n%c = 17%2 != 0
- Шаг 4: c = 2+1 = 3
Итерация 2:
- Шаг 2: c‹=s, т.е. 3 ‹= 4, перейдите к шагу 3.
- Шаг 3: n%c = 17%3 != 0
- Шаг 4: c = 3+1 = 4
Итерация 3:
- Шаг 2: c‹=s, т.е. 4 ‹= 4, перейдите к шагу 3.
- Шаг 3: n%c = 17%4 != 0
- Шаг 4: c = 4+1 = 5
Итерация 4:
- Шаг 2. Теперь c ›=4, т.е. 5 ›= 4, переходим к шагу 5.
- Шаг 5: c › s, т.е. 5 › 4, тогда это «Простое число»
Временная сложность:
Если n — целое число, то алгоритм выполняет операции T(n) = O( √ n), чтобы определить, является ли число простым или нет.
Код: JAVA
Первоначально опубликовано по адресу https://aanshsavla.hashnode.dev.