Forum » Programiranje » Najvecji skupni delitelj dveh ali vec stevil
Najvecji skupni delitelj dveh ali vec stevil
RatedR ::
Zdravo, imam tezavo pri pisanju enega odseka programa v Pythonu, poiskati moram skupnega delitelja dveh ali vec stevil, za zacetek bi za samo dva stevila.
Do zdaj sem probal poiskat delitelje, ze dolgo pa me muci problem, kako primerjat dva delitelja ko jih dobim ven:
Izpis te kode je: 1,1,3,5,9,11,11,33
Prosim za pomoc/idejo. Hvala
Do zdaj sem probal poiskat delitelje, ze dolgo pa me muci problem, kako primerjat dva delitelja ko jih dobim ven:
stevilo = 99 #primer dveh nakljucnih stevil (najvecji skupni delitelj je 11) stevilo2 = 55 i = 1 if stevilo > stevilo2: while i < stevilo/2: if stevilo%i == 0: print(i) if stevilo2%i == 0: print(i) i = i + 1 elif stevilo2 > stevilo: while i < stevilo2/2: if stevilo%i == 0: print(i) if stevilo%i == 0: print(i) i = i + 1
Izpis te kode je: 1,1,3,5,9,11,11,33
Prosim za pomoc/idejo. Hvala
OrkAA ::
Brute force resitev izgleda takole nekako:
Sicer pa za 2 stevila lahko uporabis evklidov algoritem:
Ce hoces isto stvar uporabit na spisku vecih stevil se bos moral poigrat z reduce funkcijo ali pa rekurzijo.
#!/usr/bin/env python stevila = [99, 55] najmanjse_stevilo = min(stevila) najvecji_skupni_delitelj = 1 for i in range(1, najmanjse_stevilo+1): uspesni = [] for stevilo in stevila: if stevilo % i == 0: uspesni.append(True) else: uspesni.append(False) if all(uspesni): najvecji_skupni_delitelj = i print najvecji_skupni_delitelj
Sicer pa za 2 stevila lahko uporabis evklidov algoritem:
a = 55 b = 99 while b: a, b = b, a%b return a
Ce hoces isto stvar uporabit na spisku vecih stevil se bos moral poigrat z reduce funkcijo ali pa rekurzijo.
RatedR ::
A obstaja kakšna možnost, da bi na mojem primeru poskušal pomagat? Sem hvaležen za pomoč ampak ne razumem povsem tvoje kode ker sem še čisti začetnik. Hvala
OrkAA ::
Recimo takole:
Lahko pa poves cesa na moji kodi ne razumes, pa ti bom poskusal pomagat razumet.
Imas pa v svoji kodi kar nekaj logicnih napak.
Tukaj se odlocis, da bos stel do vecjega stevila, kar nima smisla. Najvecji skupni delitelj ne more biti vecji od najmanjsega stevila.
Ne vem zakaj stejes le do polovice stevila? Najvecji skupni delitelj je v nekaterih primerih lahko enak najmanjsemu stevilo. Naprimer pri stevilih 4 in 8 je najvecji skupni delitelj 4.
stevilo = 99 #primer dveh nakljucnih stevil (najvecji skupni delitelj je 11) stevilo2 = 55 i = 1 if stevilo < stevilo2: while i <= stevilo: if stevilo%i == 0 and stevilo2%i == 0: print(i) i = i + 1 elif stevilo2 < stevilo: while i <= stevilo2: if stevilo%i == 0 and stevilo2%i == 0: print(i) i = i + 1
Lahko pa poves cesa na moji kodi ne razumes, pa ti bom poskusal pomagat razumet.
Imas pa v svoji kodi kar nekaj logicnih napak.
if stevilo > stevilo2: while i < stevilo/2:
Tukaj se odlocis, da bos stel do vecjega stevila, kar nima smisla. Najvecji skupni delitelj ne more biti vecji od najmanjsega stevila.
while i < stevilo/2:
Ne vem zakaj stejes le do polovice stevila? Najvecji skupni delitelj je v nekaterih primerih lahko enak najmanjsemu stevilo. Naprimer pri stevilih 4 in 8 je najvecji skupni delitelj 4.
Zgodovina sprememb…
- spremenil: OrkAA ()
RatedR ::
@OrkAA Hvala za pomoč, kodo razumem samo prave ideje nisem dobil prej.
Stel sem le do polovice, ker sem kot delitelje razumel to, da je najmanjse stevilo 2 s katerim lahko delis in dobis nekaj manj.
Stel sem le do polovice, ker sem kot delitelje razumel to, da je najmanjse stevilo 2 s katerim lahko delis in dobis nekaj manj.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# program za pretvorbo v desetiško število z rekurzijoOddelek: Programiranje | 1501 (1224) | MrStein |
» | NUJNO!Algoritmi C++Oddelek: Pomoč in nasveti | 1974 (1236) | DOOM_er |
» | [Raptor] Razcep na prafaktorjeOddelek: Šola | 2450 (1992) | Math Freak |
» | Naloga iz Putka - UPMOddelek: Programiranje | 2223 (1559) | NejcSSD |
» | težave pri programiranjuOddelek: Šola | 1089 (880) | gendale |