import streamlit as st st.set_page_config(page_title="Evklidov algoritem", page_icon="🧮") st.title("🧮 Evklidov algoritem za izračun NSD") st.markdown(""" ### Kaj je Evklidov algoritem? Evklidov algoritem je starodaven in zelo učinkovit postopek za iskanje **največjega skupnega delitelja (NSD)** dveh naravnih števil. Temelji na dejstvu, da je NSD(a, b) enak NSD(b, ostanek pri a ÷ b), dokler ostanek ni 0. """) st.info("Vnesi dve pozitivni celi števili in aplikacija bo pokazala vse korake algoritma ter rezultat.") # Vnos števil col1, col2 = st.columns(2) with col1: a = st.number_input("Prvo število (a)", min_value=1, value=64000000, step=1) with col2: b = st.number_input("Drugo število (b)", min_value=1, value=360000, step=1) if st.button("🚀 Izračunaj NSD", type="primary"): # Kopija za prikaz original_a, original_b = a, b # Zagotovimo, da je a večje ali enako b num1, num2 = a, b steps = [] step = 1 if num1 < num2: num1, num2 = num2, num1 steps.append(f"🔄 Zamenjava: večje število je {num1}, manjše {num2}") while num2 != 0: quotient = num1 // num2 remainder = num1 % num2 steps.append(f"**Korak {step}:** {num1} ÷ {num2} = {quotient} (celo število)") steps.append(f" Ostanek: {num1} - {quotient} × {num2} = **{remainder}**") steps.append(f" → NSD({num1}, {num2}) = NSD({num2}, {remainder})") steps.append("") # prazen prostor num1, num2 = num2, remainder step += 1 nsd = num1 # Izpis rezultata st.success(f"🎉 Največji skupni delitelj (NSD) števil {original_a} in {original_b} je: **{nsd}**") # Prikaz korakov st.markdown("### 📋 Koraki Evklidovega algoritma:") for s in steps: st.markdown(s) st.markdown(f"**Končni rezultat:** Ostanek je 0 → NSD = **{nsd}**") # Bonus: okrajšanje ulomka st.markdown("### 🎁 Bonus: Okrajšanje ulomka a / b") if original_b % nsd == 0 and original_a % nsd == 0: okrajsan_st = original_a // nsd okrajsan_im = original_b // nsd st.latex(f"\\dfrac{{{original_a}}}{{{original_b}}} = \\dfrac{{{okrajsan_st}}}{{{okrajsan_im}}}") if okrajsan_im == 1: st.info(f"Ulomek se okrajša na celo število: **{okrajsan_st}**") else: st.warning("Napaka pri okrajšavi – to se ne bi smelo zgoditi.") st.caption("Izdelal z ❤️ za učenje matematike | Streamlit + Evklid (okoli 300 pr. n. št.)")