1 / 17
Dec 2019

Taaaa… Program działa, tylko co on liczy?

  1. Sprawdziłeś czy działa dla przypadków testowych?
  2. Zacznij od poczytania czym są liczby pierwsze
  1. Już widzę co program robi źle, jednak nie wiem co dokładnie poprawić
  2. Wygooglowałem: “Liczba pierwsza – liczba naturalna większa od 1, która ma dokładnie dwa dzielniki naturalne: jedynkę i siebie samą”

No to mam pytanie…
Kiedy w Twoim kodzie pojawi sie sprawdzanie, ze zadana liczba jest pierwsza, bo to co tego na pewno nie robi

Dałem do kodu instrukcję warunkową if, która ma sprawdzić czy: podana liczba jest większa od 1, czy dzieli się przez 1, oraz czy dzieli się przez samą siebie, nie mam tylko pojęcia co zrobić żeby kod sprawdzał czy liczba dzieli się przez coś innego

Twój program sprawdza, czy podana liczba jest większa niż 1, podzielna przez przez jeden i czy dzieli się przez samą siebie. Czyli ten warunek spełnia każda liczba większa od 1.
Tak naprawdę potrzebujesz sprawdzić czy np. liczba “8(liczba musi być większa od 1)” jest niepodzielna bez reszty, poza przypadkami (8/8 , 8/1).
8/7 =PRAWDA
8/6 =PRAWDA
8/5 =PRAWDA
8/4 =FAŁSZ
8/3 =PRAWDA
8/2 =FAŁSZ
Jeśli jest jeden fałsz, to liczba nie jest pierwszą. Do tego dzielenie od 7 do 2, użyj pętli for.
Czekam na odpowiedz, czy się udało. POZDRO!

@jujek sposób, który podajesz, chociaż formalnie poprawny, jest jednak bardzo nieefektywny. Myślę, że jednak warto skorzystać z podpowiedzi @hipcia

Wiem że to głupio zabrzmi ale… nie rozumiem
W jaki sposób mam tutaj użyć modulo??

18 days later
l = []
while len(l) != 4:
    y = int(input(""))
    l.append(y)
t = 0
while t != len(l):
l = []
while len(l) != 4:
    y = int(input(""))
    l.append(y)
t = 0
while t != len(l):
    for i in l:
        for j in range(2, 100000):
            t += 1
            if i == 2:
                print("TAK")
                break
            if i % j == 0:
                print("NIE")
                break
            elif i == 1:
                print("NIE")
                break
            else:
                print("TAK")
                break

Może mi ktoś powiedzieć jaki jest błąd? bo nie przechodzi mi ?

  1. Bardzo trudno bedzie przeanalizowac program Phyton3 bez wciec. Sproboj edytowac swoj post i uzyc ikonki ze znaczkiem </>
  2. Na poczatku programu:

wydaje sie ze czytasz 3 linijki. Powinienes zczytac 1 linijke z ktorej dowiesz sie ile jeszcze linijek masz przeczytac.
3. Program szuka dzielnikow w zakresie od 0 do 100000. Byloby lepiej poprzestac na liczbie mniejszej niz liczba badana.
4. Algorytm jest bardzo nieoptymalny.
Nie wiem czy to wszystko. Tyle zauwazylem.

jak daje liczbę mniejszą niż liczba badana, program mi się wywala.
Możesz jakoś prościej powiedzieć co poprawić ?

Z treści zadania wynika że badana liczba będzie mniejsza lub równa 10000.
Ponieważ sprawdzasz wszystkie dzielniki po kolei to wystarczy poprzestać na wartości sqrt(10000).

jeszcze zauważyłem

    else:
        print("TAK")
        break

tu nie powinno być break oraz wypisywania TAK.
Dopiero jak skończą się wartości dzielników (j), wypisujesz tak na odpowiednim wcięciu

3 years later

Mam pytanie.
Wydaje mi się że ten kod działa dobrze:


ale cały czas jest błąd błąd wykonania (NZEC), a na https://ideone.com/e.js/vc1Cvs1 błąd EOF.
Czy ktoś jest w stanie mi pomóc?
Z góry dziękuję.

z pierwszej linijki

testyN = int(input("Podaj liczbe testow n: "))

wyrzuć napis proszący o podanie liczby testów
po prostu wczytuj dane

n = int(input("Wprowadz liczbe: "))

Wyjście powinno być dokładnie takie samo jak opisane w zadania bez dodatkowych tekstów "Wprowadz liczbe: ".

if testyN < 10000:

Błędny warunek, ale także zbędny. Zawsze dostaniesz liczby z przedziału [1…10000].

Jeżeli to poprawisz powinieneś zobaczyć komunikat przekroczono limit czasu. Nie musisz sprawdzać wszystkich dzielników.