Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.Python.8-10.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Проверка числа на простоту в Python

Проверку числа на простоту оформим в виде функции, которая будет возвращать True для простых чисел и False для составных.

Наивный алгоритм заключается в том, что будем перебирать числа, начиная с 2, пока не не найдем делитель числа n. Если этот делитель будет равен n, то число будет простым, иначе у n есть нетривиальный делитель и число n будет составным.

Запишем алгоритм в виде функции IsPrime (по-английски простое число — prime number, составное число — composite number).

def IsPrime(n):

    d = 2

    while n % d != 0:

        d += 1

    return d == n

В данной записи алгоритма реализована идея линейного поиска с барьерным элементом. Мы хотим найти наименьший делитель числа n. Для этого берем число d и пока n не делится на d переходим к следующему возможному делителю. Алгоритм остановится на числе, которое будет делителем числа n. Если алгоритм остановился на числе n, то число n простое, иначе — составное.

Сложность этого алгоритма — O(n).

Однако данный алгоритм можно оптимизировать, если заметить, что у любого составного числа есть собственный (то есть не равный 1) делитель, не превосходящий квадратного корня из числа. Это позволит сократить сложность алгоритма до O(n√):

def IsPrime(n):

    d = 2

    while d * d <= n and n % d != 0:

        d += 1

    return d * d > n

Соответственно, такой алгоритм заканчивает работу либо при нахождении делителя, либо если проверяемый делитель станет больше корня из n. Чиcло n является простым, если алгоритм закончился по причине того, что проверяемый делитель стал больше, чем корень из n.

ПЕРЕБОР ТОЛЬКО НЕЧЕТНЫХ ДЕЛИТЕЛЕЙ

Сделаем ещё одну оптимизацию — будем перебирать только нечетные делители, если число не делится на два.

def isPrime(n):     if n % 2 == 0:         return n == 2

    d = 3

    while d * d <= n and n % d != 0:

        d += 2

    return d * d > n

ПРОГРАММА:

(0 — признак конца ввода) 

sum_int = 0

counter = 0

x = int(input())

while x != 0:

    sum_int += x

    counter += 1

    x = int(input())

print(sum_int / counter)

ОДНОПРОХОДНАЯ ПРОГРАММА:

summa = 0 summa_2 = 0 kolichestvo = 0 x = int(input()) while x != 0: summa += x summa_2 += x*x kolichestvo += 1 x = int(input()) srednee = summa/kolichestvo srednee_2 = summa_2/kolichestvo otklonenie = (srednee_2 - srednee**2)**0.5 print('Среднее значение:', srednee, '+-', otklonenie)

Цикл for в Python

Цикл for, также называемый циклом с параметром, в языке Питон богат возможностями. В цикле forуказывается переменная и множество значений, по которому будет пробегать переменная. Множество значений может быть задано списком, кортежем, строкой или диапазоном.

Вот простейший пример использования цикла, где в качестве множества значений используется кортеж:

i = 1 for color in 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet':     print(i, '-th color of rainbow is ', color, sep = '')     i += 1

В этом примере переменная color последовательно принимает значения ‘red’, ‘orange’ и т.д. В теле цикла выводится сообщение, которое содержит название цвета, то есть значение переменной color, а также номер итерации цикла – число, которое сначала равно 1, а потом увеличивается на один (инструкцией i += 1 с каждым проходом цикла).

В списке значений могут быть выражения различных типов, например:

for i in 1, 2, 3, 'one', 'two', 'three':     print(i)

При первых трех итерациях цикла переменная i будет принимать значение типа int, при последующих трех — типа str.