carpannn / app.py
byikp's picture
Update app.py
0fffb0e verified
import gradio as gr
import math
from math import sqrt
import matplotlib.pyplot as plt
import io
import base64
def asal_carpanlari_bul(n):
carpanlar = []
while n % 2 == 0:
carpanlar.append(2)
n = n // 2
for i in range(3, int(sqrt(n)) + 1, 2):
while n % i == 0:
carpanlar.append(i)
n = n // i
if n > 2:
carpanlar.append(n)
return carpanlar
def pozitif_carpanlari_bul(n):
carpanlar = set()
for i in range(1, int(sqrt(n)) + 1):
if n % i == 0:
carpanlar.add(i)
carpanlar.add(n // i)
return sorted(carpanlar)
def carpan_agaci_ciz(n):
fig, ax = plt.subplots(figsize=(8, 6))
ax.axis('off')
current = n
y_pos = 0
x_pos = 0
spacing = 2
def draw_node(x, y, text):
ax.text(x, y, str(text), ha='center', va='center',
bbox=dict(facecolor='white', edgecolor='black', boxstyle='circle'))
def draw_connection(x1, y1, x2, y2):
ax.plot([x1, x2], [y1, y2], 'k-', lw=1)
nodes = {}
queue = [(n, 0, 0, None)]
while queue:
num, level, pos, parent = queue.pop(0)
x = pos * spacing
y = -level
draw_node(x, y, num)
nodes[num] = (x, y)
if parent is not None:
draw_connection(nodes[parent][0], nodes[parent][1], x, y)
if num == 1:
continue
carpanlar = asal_carpanlari_bul(num)
if len(carpanlar) == 1: # Asalsa
draw_node(x, y-1, 1)
draw_connection(x, y, x, y-1)
else:
en_kucuk = min(carpanlar)
child1 = en_kucuk
child2 = num // en_kucuk
child_pos = pos - 0.5 if len(queue) > 0 else pos + 0.5
queue.append((child1, level+1, pos - 0.5, num))
queue.append((child2, level+1, pos + 0.5, num))
plt.tight_layout()
# Resmi base64'e çevir
buf = io.BytesIO()
plt.savefig(buf, format='png')
plt.close()
buf.seek(0)
img_str = "data:image/png;base64," + base64.b64encode(buf.read()).decode('utf-8')
return img_str
def hesapla(n):
try:
n = int(n)
if n <= 0:
raise ValueError("Pozitif bir sayı giriniz.")
carpanlar = asal_carpanlari_bul(n)
carpan_str = " × ".join(map(str, carpanlar)) if len(carpanlar) > 0 else "1"
pozitif_carpanlar = pozitif_carpanlari_bul(n)
pozitif_carpan_str = ", ".join(map(str, pozitif_carpanlar))
agac_resmi = carpan_agaci_ciz(n)
return (f"{n} = {carpan_str}",
pozitif_carpan_str,
agac_resmi)
except ValueError as e:
return str(e), "", ""
except Exception as e:
return f"Hata oluştu: {str(e)}", "", ""
with gr.Blocks(title="Asal Çarpan Ağacı") as demo:
gr.Markdown("## 🔢 Asal Çarpan Ağacı Oluşturucu")
with gr.Row():
sayi_girisi = gr.Number(label="Bir sayı girin", value=48, minimum=1, step=1)
hesapla_butonu = gr.Button("Asal Çarpan Ağacını Oluştur", variant="primary")
with gr.Row():
with gr.Column():
carpanlar_text = gr.Textbox(label="Asal Çarpanlar")
pozitif_carpanlar_text = gr.Textbox(label="Pozitif Çarpanlar (Küçükten Büyüğe)", lines=5)
with gr.Column():
agac_resmi = gr.Image(label="Çarpan Ağacı", interactive=False)
hesapla_butonu.click(
hesapla,
inputs=sayi_girisi,
outputs=[carpanlar_text, pozitif_carpanlar_text, agac_resmi]
)
demo.launch()