Witam!
Mam pewien problem, mój program działa (chyba) tak jak powinien, jednak sędzia go nie akceptuje.
Link do programu: https://ideone.com/DIODSB28
created
last reply
- 16
replies
- 1.2k
views
- 9
users
- 2
likes
- 5
links
Witam!
Mam pewien problem, mój program działa (chyba) tak jak powinien, jednak sędzia go nie akceptuje.
Link do programu: https://ideone.com/DIODSB28
Nie potrzebujesz tablicy. Każda liczba naturalna dzieli się bez reszty przez 1 i samą siebie. Dwa ostatnie warunki będą zawsze prawdziwe (l/l > 0 && l/1 > 0). Do sprawdzania podzielności użyj modulo.
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!
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 ?
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.
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
Mam pytanie.
Wydaje mi się że ten kod działa dobrze:
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.
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
PP0504B - StringMerge - w języku C | Zbiór zadań | 5 | 185 | Jun '24 |
FR_08_11 - Gra w bańki | Zbiór zadań | 1 | 148 | Jun '24 |
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 150 | Jul '24 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 125 | Jul '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 124 | Feb 1 |