| 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: |
| 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() |
| |
| |
| 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() |