Zadanie maturalne - rozkład liczb złożonych na czynniki pierwsze

0

Mam problem z algorytmem rozkładu liczby złożonej na czynniki pierwsze (poniżej zamieszczam treść zadania wraz z przykładem i plikiem tekstowym zawierającym dane)
https://imgur.com/S1m1HS6
https://pastebin.com/mcYuKJL0
W swoim rozwiązaniu dotarłem do wyeliminowania liczb parzystych, które nie spełniają warunków zadania,

def ex59_1():
    factor = 3
    result = 0
    for x in range(1, 1001):
        number = numbers.readline()
        number = int(number)
        if number % 2 == 0:
            continue
        else:
            pass
            # liczby nieparzyste


ex59_1()

spróbowałem zaimplementować rozwiązanie zaproponowane przez autorów zbioru zadań (napisane w C++), ale bezskutecznie. Byłbym bardzo wdzięczny za pomoc!

1

Tu: https://github.com/lion137/Competitive-Helper/blob/master/algorithm.py jest wszystko do sfaktoryzowania liczby (trzeba tylko zmniejszyć prime_nums, jest ustawione na liczby do 10^16 ) i dopisać taką funkcję:

def solution(n):
	factors = factorize(n)
	t = not 2 in factors
	factors_set = set(factors)
	return t and len(factors_set) == 3
1

prymitywna metoda, ale bardziej w stylu python:

def factorize(x):
    d = 2
    while x != 1:
        while x % d == 0:
            x = x // d
            yield d
        d = d + 1

def odd_unique_factors(x):
    for x, _ in itertools.groupby(factorize(x)):
        if x != 2:
            yield x

sum(1 for x in odd_unique_factors(2*2*3*3*5*7*7))
0

Nie licząc powyższych rozwiązań, udało mi się przerobić kod, podany w zbiorze zadań. Wklejam go poniżej dla osób czytających wątek/do analizy:

numbers = open("dane/59/liczby.txt", "r")


def ex59_1():
    output = 0
    """odczytywanie kolejnych wierszy z pliku liczby.txt"""
    for x in range(1, 1001):
        number = numbers.readline()
        number = int(number)

        output_number = number

        answer = 0
        factor = 3
        if number % 2 == 0:
            pass
        else:
            while number > 1:
                if number % factor == 0:
                    answer += 1
                while number % factor == 0:
                    number = number // factor
                factor += 2
        if answer == 3:
            output += 1
            """wypisywanie ilości rozwiązań spełniających założenia zadania oraz liczbę spełniającą założenia"""
            print(output)
            print("number = " + str(output_number))


ex59_1()
0

Taka mala uwaga - zamiast tam czytac linia po linii recznie, to mozesz zrobic:

for line in open('sciezka_do_pliku.txt'):
    ... do something with the line here ...

Nic duzego, ale zawsze troszke mniej do pisania a na maturze lepiej miec wiecej czasu niz mniej : )

1 użytkowników online, w tym zalogowanych: 0, gości: 1