• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rozkład liczby na czynniki- zbiór zadań

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
346 wizyt
pytanie zadane 1 grudnia 2020 w Rozwój zawodowy, nauka, praca przez Luidżi Początkujący (330 p.)
otagowane ponownie 1 grudnia 2020 przez Luidżi

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)

 

komentarz 1 grudnia 2020 przez lobo.guru Obywatel (1,920 p.)
A co nie działa? Nie podałeś numeru zadania, a nie chce mi się szukać :)

Na oko wygląda OK.

1 odpowiedź

0 głosów
odpowiedź 1 grudnia 2020 przez lobo.guru Obywatel (1,920 p.)
A co nie działa? Nie podałeś numeru zadania, a nie chce mi się szukać :)

Na oko wygląda OK.
komentarz 2 grudnia 2020 przez Luidżi Początkujący (330 p.)
Tak jak napisałem wyżej, dostaję wynik 53 zamiast 114 jak jest w odpowiedziach. A numer zadania to 59- Wiązka zadań Ciekawe liczby :). Słyszałem gdzieś że dane w tych zbiorach są czasem trochę niepoprawne, więc jeżeli nic nie przeoczyłem ani nikomu nie uda się znaleźć błędu to może to jest powodem, aczkolwiek czy są to potwierdzone informacje to nie wiem.
komentarz 3 grudnia 2020 przez lobo.guru Obywatel (1,920 p.)
Może faktycznie jest błąd w wynikach? Dziwna sprawa.

Podobne pytania

0 głosów
0 odpowiedzi 976 wizyt
pytanie zadane 16 lutego 2021 w Rozwój zawodowy, nauka, praca przez Luidżi Początkujący (330 p.)
0 głosów
0 odpowiedzi 828 wizyt
pytanie zadane 18 września 2022 w Python przez qwert 100 Obywatel (1,250 p.)
+1 głos
2 odpowiedzi 1,640 wizyt
pytanie zadane 14 lutego 2020 w Python przez MartinLenki Nowicjusz (130 p.)

93,434 zapytań

142,429 odpowiedzi

322,662 komentarzy

62,798 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...