πŸ” Как ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поиск Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ python: 5 простых способов

Как ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поиск Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² Python

Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ поиска Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:


def find_divisors(num):
    divisors = []
    for i in range(1, int(num ** 0.5) + 1):
        if num % i == 0:
            divisors.append(i)
            if i != num // i:
                divisors.append(num // i)
    divisors.sort()
    return divisors

num = 36
divisors = find_divisors(num)
print(divisors)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция find_divisors, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ число num ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Π΅Π³ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ. Алгоритм основан Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ числа ΠΏΠ°Ρ€Π½Ρ‹Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ всСгда Π±ΡƒΠ΄Π΅Ρ‚ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π΅Π½ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΡ€Π½ΡŽ числа, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π΅Π½ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΡ€Π½ΡŽ числа. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня числа ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±Π° дСлитСля Π² список.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка:


def find_divisors(num):
    return [i for i in range(1, int(num ** 0.5) + 1) if num % i == 0]

num = 36
divisors = find_divisors(num)
print(divisors)

Оба ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(sqrt(n)), Ρ‡Ρ‚ΠΎ являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ для поиска Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поиск Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² Python?

Поиск Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ числа - ΠΎΠ΄Π½Π° ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π’ языкС Python Π΅ΡΡ‚ΡŒ нСсколько способов ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°.

1. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

НаиболСС простым способом являСтся ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ чисСл ΠΎΡ‚ 1 Π΄ΠΎ N ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, дСлится Π»ΠΈ число Π½Π°Ρ†Π΅Π»ΠΎ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ. Для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ Π΄ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня числа N, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ дСлСния Π½Π° ΡƒΠΆΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ.


def find_divisors(n):
    divisors = []
    
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            divisors.append(i)
            if i != n // i:    # Если Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ являСтся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ числа, добавляСм ΠΈ Π΅Π³ΠΎ
                divisors.append(n // i)
    
    return divisors

n = 36
divisors = find_divisors(n)
print(divisors)
    

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ find_divisors, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ число n ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список Π΅Π³ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» for для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° чисСл ΠΎΡ‚ 1 Π΄ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня ΠΈΠ· n. Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Π΅Π»ΠΈΡ‚ число Π½Π°Ρ†Π΅Π»ΠΎ, ΠΌΡ‹ добавляСм Π΅Π³ΠΎ Π² список Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ провСряСм, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ являСтся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ числа, ΠΈ Ссли это Ρ‚Π°ΠΊ, Ρ‚ΠΎ добавляСм Π΅Π³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π² список.

2. ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл

Если ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ³ΠΎ числа, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ n. Π­Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ повысит ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.


def find_divisors_odd(n):
    divisors = []
    
    for i in range(1, int(n**0.5) + 1, 2):
        if n % i == 0:
            divisors.append(i)
            if i != n // i:
                divisors.append(n // i)
    
    return divisors

n = 37
divisors = find_divisors_odd(n)
print(divisors)
    

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ find_divisors_odd, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа ΠΎΡ‚ 1 Π΄ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня ΠΈΠ· n. Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

3. ИспользованиС матСматичСских свойств числа

Если ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ числами ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΠΌ доступ ΠΊ ΠΈΡ… матСматичСским свойствам, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти знания для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ поиска Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ.

НапримСр, для простых чисСл достаточно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Π΄ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня ΠΈΠ· числа. Если Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ Π΄ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ число простоС.


import math

def is_prime(n):
    if n <= 1:
        return False
    
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    
    return True

n = 37
if is_prime(n):
    print(f"{n} - простоС число")
else:
    print(f"{n} - Π½Π΅ являСтся простым числом")

divisors = find_divisors(n)
print(divisors)
    

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создаСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ is_prime, которая провСряСт, являСтся Π»ΠΈ число n простым. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» for для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΎΡ‚ 2 Π΄ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня ΠΈΠ· n. Если Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, Ρ‚ΠΎ число Π½Π΅ являСтся простым ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ False. Если ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π±Π΅Π· Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ True.

Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΡ‹ провСряСм, являСтся Π»ΠΈ число n простым, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ список Π΅Π³ΠΎ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ссли ΠΎΠ½ΠΎ Π½Π΅ являСтся простым.

Π’ΠΎΡ‚ нСсколько способов ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ поиска Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² Python. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ условий.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π‘Π°ΠΌΡ‹ΠΉ быстрый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ числа | Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° Π•Π“Π­ 2023

21 Π¦ΠΈΠΊΠ» while. НахоТдСниС всСх Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ числа Python

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° простоты числа ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ. РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Python

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ” Как Π½Π°ΠΉΡ‚ΠΈ элСмСнт Π² массивС ΠΏΠΈΡ‚ΠΎΠ½: простая инструкция

πŸ”Ž Как Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ дискриминант Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅? Π›Π΅Π³ΠΊΠΎ ΠΈ быстро!

πŸ—‘οΈ Как ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Python Π½Π° Mac OS: простая инструкция

πŸ” Как ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ поиск Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ python: 5 простых способов

πŸ” Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΡƒΠΊΠ²Π° f Π² Python? ВсС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ Π±ΡƒΠΊΠ²Π΅ f Π² Python!

πŸ” Как ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ csv Ρ„Π°ΠΉΠ» Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ”‘ΠšΠ°ΠΊ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡, зная Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΈΡ‚ΠΎΠ½Π°?🐍