Cześć, robię sobie zadanie ze zbioru do matury. Polecenie jest mniej więcej takie takie: "Podaj ile liczb z pliku ma dokładnie 3 różne czynniki z których każdy jest nieparzysty".
Przeczytałem komentarz do zadań, no niby mój sposób wygląda na prawidłowy ale zamiast 114 w wyniku otrzymuję 53. Oto mój tok myślenia: do funkcji sprawdzającej podaję liczbę, pierwsze co sprawdzam to czy jest ona podzielna przez 2, jeśli tak to od razu odpada- nie spełnia warunków zadania, następnie tworzę 3 zmienne:
- counter do liczenia liczby czynników
- pierwiastek kwadratowy który używam w pętli przy liczeniu czynników
- K czyli mój czynnik, któremu od razu nadaję wartość 3
Potem wykonuję dwie zagnieżdżone pętle while- jedna sprawdza czy mój numer jest większy od 1, od razu sprawdzam czy numer jest podzielny bez reszty przez dane K, jeżeli tak to zwiększam counter o 1, potem przechodzę do następnej pętli w której dzielę numer przez K dopóki numer % K == 0, jeżeli ta pętla się wykona to podnoszę K o dwa, ponieważ warunkiem jest że K musi być nieparzyste.
Po wykonaniu pętli sprawdzam czy counter jest równy 3, jeżeli tak to zwracam True, jeżeli nie to False. W głównej funkcji sprawdzam czy zwróciła się prawda, jeżeli tak to podnoszę ostateczny wynik.
Proszę o jakąś pomoc, ponieważ trochę już to analizuję i nie mogę znaleźć gdzie zrobiłem jakiś błąd. Poniżej mój kod.
import math
def check(number):
if number % 2 == 0:
return False
K = 3
counter = 0
sqare_root = math.sqrt(number)
while number > 1 and K <= sqare_root:
if number % K == 0:
counter += 1
while number % K == 0:
number = number / K
K += 2
if counter == 3:
return True
else:
return False
result = 0
with open('liczby.txt') as file:
for line in file:
line = line.strip()
number = int(line)
if check(number):
result += 1
print(result)