• 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ń

Object Storage Arubacloud
0 głosów
235 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 571 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 524 wizyt
pytanie zadane 18 września 2022 w Python przez qwert 100 Obywatel (1,250 p.)
+1 głos
2 odpowiedzi 1,164 wizyt
pytanie zadane 14 lutego 2020 w Python przez MartinLenki Nowicjusz (130 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...