Module alexandria.math.algorithms

Algorithms

Expand source code
# SPDX-FileCopyrightText: © 2021 Antonio López Rivera <antonlopezr99@gmail.com>
# SPDX-License-Identifier: GPL-3.0-only

"""
Algorithms
----------
"""


import itertools


def prime_factors(n):
    """
    Prime factor finding algorithm using _itertools_.

    :param n: Number.
    :return:  Generator of prime factors of _n_.
    """
    for i in itertools.chain([2], itertools.count(3, 2)):
        if n <= 1:
            break
        while n % i == 0:
            n //= i
            yield i


def largest_prime_factor(n):
    """
    Finds largest prime factor using Alexandria _prime_factor_.

    :param n: Number.
    :return:  Alexandria largest prime factor.
    """
    return list(prime_factors(n))[-1]

Functions

def largest_prime_factor(n)

Finds largest prime factor using Alexandria prime_factor.

:param n: Number. :return: Alexandria largest prime factor.

Expand source code
def largest_prime_factor(n):
    """
    Finds largest prime factor using Alexandria _prime_factor_.

    :param n: Number.
    :return:  Alexandria largest prime factor.
    """
    return list(prime_factors(n))[-1]
def prime_factors(n)

Prime factor finding algorithm using itertools.

:param n: Number. :return: Generator of prime factors of n.

Expand source code
def prime_factors(n):
    """
    Prime factor finding algorithm using _itertools_.

    :param n: Number.
    :return:  Generator of prime factors of _n_.
    """
    for i in itertools.chain([2], itertools.count(3, 2)):
        if n <= 1:
            break
        while n % i == 0:
            n //= i
            yield i