{
  "ad": "Asal Sayı ve Asal Çarpanlara Ayırma",
  "surum": "1.2.0",
  "girdiSemasi": {
    "sayi": {
      "tip": "string",
      "birim": "tam sayı",
      "kisit": "İşaret hariç en çok 30 ondalık basamak; |sayı| en fazla 10^30−1",
      "zorunlu": "tek sayı modunda evet",
      "not": "0 tek sayı modunda SIFIR_TANIMSIZ hatasıdır; 1 birim olarak hesaplanır; negatiflerde asallık tanımsız, çarpan ve türevler mutlak değer içindir."
    },
    "sayilar": {
      "tip": "array",
      "ogeTipi": "string",
      "kisit": "EBOB-EKOK modu için 2..256 tam sayı",
      "zorunlu": "çoklu modda evet"
    },
    "bolenListesiIstensin": {
      "tip": "boolean",
      "varsayilan": true
    },
    "hamAlanSinirlari": {
      "tekAlan": {
        "limitKarakter": 256,
        "uygulama": "sayi ve sayilar dizisindeki her öğe, ayraç temizlenmeden önce"
      },
      "cokluUiMetni": {
        "limitKarakter": 16384,
        "uygulama": "UI virgül/noktalı virgül/satır sonuyla ayırmadan önce toplam metin"
      },
      "asildigindaHataKodu": "HAM_KARAKTER_SINIRI",
      "basamakSinirindanFarki": "BASAMAK_SINIRI yalnız temizlenmiş sayının işaret hariç 30 basamağı aşmasıdır."
    }
  },
  "ciktiSemasi": {
    "sayi": {
      "tip": "string (BigInt)"
    },
    "asalMi": {
      "tip": "boolean"
    },
    "asallikKesin": {
      "tip": "boolean",
      "aciklama": "Başarı yanıtında pozitif sayının asallık kararı kesindir; negatif sayıda asallık tanımsız olduğu için false olur. Kaynaklı sınır üstünde tanıkları geçen değer başarı yanıtı değil SONUC_BELIRSIZ üretir."
    },
    "carpanlamaKesin": {
      "tip": "boolean",
      "aciklama": "Başarı yanıtında true olur. Bir ara çarpanın asal olduğu kesinleştirilemezse çarpan ve türevler yayımlanmaz; SONUC_BELIRSIZ döner."
    },
    "enKucukAsalCarpan": {
      "tip": "string (BigInt) | null"
    },
    "carpanlar": {
      "tip": "array",
      "ogeSemasi": {
        "asal": {
          "tip": "string (BigInt)"
        },
        "us": {
          "tip": "string (BigInt)"
        }
      },
      "not": "Asal sayıda ek ayrışım olmadığı için boş dizidir; türevler motor içinde sayının p^1 ayrışımıyla hesaplanır."
    },
    "gosterim": {
      "tip": "string"
    },
    "duzGosterim": {
      "tip": "string"
    },
    "tekrarliGosterim": {
      "tip": "string"
    },
    "bolenSayisi": {
      "tip": "string (BigInt)"
    },
    "bolenlerToplami": {
      "tip": "string (BigInt)"
    },
    "bolenler": {
      "tip": "array<string (BigInt)> | null"
    },
    "bolenSayisiCok": {
      "tip": "boolean"
    },
    "bolenlerIlk50": {
      "tip": "array<string (BigInt)> | null"
    },
    "bolenlerSon50": {
      "tip": "array<string (BigInt)> | null"
    },
    "eulerPhi": {
      "tip": "string (BigInt)"
    },
    "sayiSinifi": {
      "tip": "mukemmel | eksik | bollu"
    },
    "komsuAsallar": {
      "tip": "object | null",
      "aciklama": "Komşu adayların asallığı kaynaklı deterministik sınır içinde kanıtlanabiliyorsa nesne, aksi halde null.",
      "alanlar": {
        "onceki": {
          "tip": "string (BigInt) | null"
        },
        "sonraki": {
          "tip": "string (BigInt)"
        }
      }
    },
    "cokluMod": {
      "tip": "object | yok",
      "alanlar": {
        "ebob": {
          "tip": "string (BigInt)"
        },
        "ekok": {
          "tip": "string (BigInt)"
        },
        "aralarindaAsalMi": {
          "tip": "boolean"
        },
        "ebobCarpanlari": {
          "tip": "array",
          "ogeSemasi": {
            "asal": {
              "tip": "string (BigInt)"
            },
            "us": {
              "tip": "string (BigInt)"
            }
          }
        },
        "ekokCarpanlari": {
          "tip": "array",
          "ogeSemasi": {
            "asal": {
              "tip": "string (BigInt)"
            },
            "us": {
              "tip": "string (BigInt)"
            }
          }
        },
        "ebobGosterim": {
          "tip": "string"
        },
        "ekokGosterim": {
          "tip": "string"
        },
        "adimlar": {
          "tip": "object",
          "aciklama": "Her sayının ayrışımı ile EBOB-min ve EKOK-max üs tablosu.",
          "alanlar": {
            "sayilar": {
              "tip": "array",
              "ogeSemasi": {
                "sayi": {
                  "tip": "string (BigInt)"
                },
                "carpanlar": {
                  "tip": "array",
                  "ogeSemasi": {
                    "asal": {
                      "tip": "string (BigInt)"
                    },
                    "us": {
                      "tip": "string (BigInt)"
                    }
                  }
                },
                "gosterim": {
                  "tip": "string"
                }
              }
            },
            "usTablosu": {
              "tip": "array",
              "ogeSemasi": {
                "asal": {
                  "tip": "string (BigInt)"
                },
                "usler": {
                  "tip": "array<string (BigInt) | null>"
                },
                "ebobIcinMinUs": {
                  "tip": "string (BigInt)"
                },
                "ekokIcinMaxUs": {
                  "tip": "string (BigInt) | null"
                }
              }
            },
            "ebobKurali": {
              "tip": "string"
            },
            "ekokKurali": {
              "tip": "string"
            },
            "sifirOzelKurali": {
              "tip": "string | null"
            }
          }
        }
      }
    },
    "yontem": {
      "tip": "deneme-bolme | pollard-rho"
    },
    "sureMs": {
      "tip": "number",
      "aciklama": "Matematiksel sonuç değil, operasyonel süre metadatasıdır; BigInt string kuralının tek istisnasıdır."
    },
    "uyarilar": {
      "tip": "array<string>"
    },
    "hataKodu": {
      "tip": "GIRDI_BOS | GIRDI_TIP | GIRDI_KARAKTER | HAM_KARAKTER_SINIRI | BASAMAK_SINIRI | SIFIR_TANIMSIZ | COKLU_ADET | BUTCE_ASILDI | SONUC_BELIRSIZ | KURAL_GECERSIZ | HESAP_TAMAMLANAMADI | yok",
      "aciklama": "Hata durumunda doğal dil metninden bağımsız, stabil programatik kod."
    },
    "hata": {
      "tip": "string | yok",
      "aciklama": "Hata durumunda hataKodu ile birlikte açıklayıcı metin döner; throw edilmez."
    },
    "yanitVaryantlari": {
      "ayristirmaKurali": "Yanıt tam olarak bir varyanta uyar. zorunluAlanlar anahtar kümesinin tamamıdır; yasakAlanlar bulunamaz; ekAlanlar=yasak olduğundan listelenmemiş üst düzey anahtar kabul edilmez.",
      "oneOf": {
      "tekBasari": {
        "zorunluAlanlar": [
          "sayi",
          "asalMi",
          "asallikKesin",
          "enKucukAsalCarpan",
          "carpanlar",
          "gosterim",
          "duzGosterim",
          "tekrarliGosterim",
          "bolenSayisi",
          "bolenlerToplami",
          "eulerPhi",
          "sayiSinifi",
          "komsuAsallar",
          "bolenler",
          "bolenSayisiCok",
          "bolenlerIlk50",
          "bolenlerSon50",
          "carpanlamaKesin",
          "yontem",
          "sureMs",
          "uyarilar"
        ],
        "yasakAlanlar": [
          "cokluMod",
          "hataKodu",
          "hata"
        ],
        "ekAlanlar": "yasak"
      },
      "cokluBasari": {
        "zorunluAlanlar": [
          "cokluMod",
          "carpanlamaKesin",
          "yontem",
          "sureMs",
          "uyarilar"
        ],
        "yasakAlanlar": [
          "sayi",
          "asalMi",
          "asallikKesin",
          "enKucukAsalCarpan",
          "carpanlar",
          "gosterim",
          "duzGosterim",
          "tekrarliGosterim",
          "bolenSayisi",
          "bolenlerToplami",
          "eulerPhi",
          "sayiSinifi",
          "komsuAsallar",
          "bolenler",
          "bolenSayisiCok",
          "bolenlerIlk50",
          "bolenlerSon50",
          "hataKodu",
          "hata"
        ],
        "ekAlanlar": "yasak"
      },
      "birlesikBasari": {
        "zorunluAlanlar": [
          "sayi",
          "asalMi",
          "asallikKesin",
          "enKucukAsalCarpan",
          "carpanlar",
          "gosterim",
          "duzGosterim",
          "tekrarliGosterim",
          "bolenSayisi",
          "bolenlerToplami",
          "eulerPhi",
          "sayiSinifi",
          "komsuAsallar",
          "bolenler",
          "bolenSayisiCok",
          "bolenlerIlk50",
          "bolenlerSon50",
          "cokluMod",
          "carpanlamaKesin",
          "yontem",
          "sureMs",
          "uyarilar"
        ],
        "yasakAlanlar": [
          "hataKodu",
          "hata"
        ],
        "ekAlanlar": "yasak"
      },
      "hata": {
        "zorunluAlanlar": [
          "hataKodu",
          "hata"
        ],
        "yasakAlanlar": [
          "sayi",
          "asalMi",
          "asallikKesin",
          "enKucukAsalCarpan",
          "carpanlar",
          "gosterim",
          "duzGosterim",
          "tekrarliGosterim",
          "bolenSayisi",
          "bolenlerToplami",
          "eulerPhi",
          "sayiSinifi",
          "komsuAsallar",
          "bolenler",
          "bolenSayisiCok",
          "bolenlerIlk50",
          "bolenlerSon50",
          "cokluMod",
          "carpanlamaKesin",
          "yontem",
          "sureMs",
          "uyarilar"
        ],
        "ekAlanlar": "yasak"
        }
      }
    }
  },
  "ornekCagri": {
    "sayi": "360",
    "bolenListesiIstensin": true
  },
  "ornekYanit": {
    "sayi": "360",
    "asalMi": false,
    "asallikKesin": true,
    "carpanlamaKesin": true,
    "enKucukAsalCarpan": "2",
    "carpanlar": [
      {
        "asal": "2",
        "us": "3"
      },
      {
        "asal": "3",
        "us": "2"
      },
      {
        "asal": "5",
        "us": "1"
      }
    ],
    "gosterim": "2³ × 3² × 5",
    "duzGosterim": "2^3 * 3^2 * 5",
    "tekrarliGosterim": "2 × 2 × 2 × 3 × 3 × 5",
    "bolenSayisi": "24",
    "bolenlerToplami": "1170",
    "bolenler": [
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "8",
      "9",
      "10",
      "12",
      "15",
      "18",
      "20",
      "24",
      "30",
      "36",
      "40",
      "45",
      "60",
      "72",
      "90",
      "120",
      "180",
      "360"
    ],
    "bolenSayisiCok": false,
    "bolenlerIlk50": null,
    "bolenlerSon50": null,
    "eulerPhi": "96",
    "sayiSinifi": "bollu",
    "komsuAsallar": {
      "onceki": "359",
      "sonraki": "367"
    },
    "yontem": "deneme-bolme",
    "sureMs": 0.2,
    "uyarilar": []
  },
  "safCokluOrnegi": {
    "ornekCagri": {
      "sayilar": [
        "-12",
        "0",
        "18"
      ]
    },
    "ornekYanit": {
      "cokluMod": {
        "ebob": "6",
        "ekok": "0",
        "aralarindaAsalMi": false,
        "ebobCarpanlari": [
          {
            "asal": "2",
            "us": "1"
          },
          {
            "asal": "3",
            "us": "1"
          }
        ],
        "ekokCarpanlari": [],
        "ebobGosterim": "2 × 3",
        "ekokGosterim": "0",
        "adimlar": {
          "sayilar": [
            {
              "sayi": "-12",
              "carpanlar": [
                {
                  "asal": "2",
                  "us": "2"
                },
                {
                  "asal": "3",
                  "us": "1"
                }
              ],
              "gosterim": "−1 × 2² × 3"
            },
            {
              "sayi": "0",
              "carpanlar": [],
              "gosterim": "0 (asal çarpanlara ayrılamaz)"
            },
            {
              "sayi": "18",
              "carpanlar": [
                {
                  "asal": "2",
                  "us": "1"
                },
                {
                  "asal": "3",
                  "us": "2"
                }
              ],
              "gosterim": "2 × 3²"
            }
          ],
          "usTablosu": [
            {
              "asal": "2",
              "usler": [
                "2",
                null,
                "1"
              ],
              "ebobIcinMinUs": "1",
              "ekokIcinMaxUs": null
            },
            {
              "asal": "3",
              "usler": [
                "1",
                null,
                "2"
              ],
              "ebobIcinMinUs": "1",
              "ekokIcinMaxUs": null
            }
          ],
          "ebobKurali": "Ortak asal çarpanların en küçük üsleri alınır.",
          "ekokKurali": "Bütün asal çarpanların en büyük üsleri alınır.",
          "sifirOzelKurali": "0'ın asal üsleri tanımsızdır; EBOB için sıfır dışındaki sayılar kullanılır ve 0 içeren grubun EKOK'u 0'dır."
        }
      },
      "carpanlamaKesin": true,
      "yontem": "deneme-bolme",
      "sureMs": 0.6,
      "uyarilar": [
        "Çoklu modda 0 için sayısal EBOB/EKOK hesaplandı; 0'ın asal çarpan gösterimi tanımlı değildir."
      ]
    }
  },
  "belirsizYanitOrnegi": {
    "ornekGirdi": {
      "sayi": "3317044064679887385961981"
    },
    "gercekMotorCiktisi": {
      "hataKodu": "SONUC_BELIRSIZ",
      "hata": "kesin sonuç üretilemedi"
    },
    "belirsizkenAlanlar": {
      "sayi": "yok",
      "asalMi": "yok",
      "asallikKesin": "yok",
      "carpanlamaKesin": "yok",
      "enKucukAsalCarpan": "yok",
      "carpanlar": "yok",
      "gosterim": "yok",
      "duzGosterim": "yok",
      "tekrarliGosterim": "yok",
      "bolenSayisi": "yok",
      "bolenlerToplami": "yok",
      "bolenler": "yok",
      "bolenSayisiCok": "yok",
      "bolenlerIlk50": "yok",
      "bolenlerSon50": "yok",
      "eulerPhi": "yok",
      "sayiSinifi": "yok",
      "komsuAsallar": "yok",
      "cokluMod": "yok",
      "yontem": "yok",
      "sureMs": "yok",
      "uyarilar": "yok"
    }
  },
  "formulAciklamasi": {
    "carpanlaraAyirma": "n = p1^e1 × ... × pk^ek; n > 1 için ayrışım çarpan sırası dışında tektir.",
    "bolenSayisi": "τ(n) = ∏(ei + 1)",
    "bolenlerToplami": "σ(n) = ∏((pi^(ei+1) - 1) / (pi - 1))",
    "eulerPhi": "φ(n) = ∏ pi^(ei-1) × (pi - 1)",
    "ebobEkok": "EBOB ortak asalların minimum, EKOK bütün asalların maksimum üssünü kullanır; sayısal çekirdek EBOB için Öklid, EKOK için a / ebob(a,b) × b uygular."
  },
  "hataKodlari": [
    "GIRDI_BOS: sayı alanı boş",
    "GIRDI_TIP: sayı string veya BigInt değil",
    "GIRDI_KARAKTER: izin verilmeyen karakter var",
    "HAM_KARAKTER_SINIRI: tek ham öğe 256 veya çoklu UI metni 16.384 karakter sınırını aşıyor",
    "BASAMAK_SINIRI: temizlenmiş sayı 30 basamağı aşıyor",
    "SIFIR_TANIMSIZ: tek sayı modunda 0'ın bölenleri sonsuz",
    "COKLU_ADET: EBOB-EKOK öğe sayısı 2..256 dışında veya sayilar alanı dizi değil",
    "BUTCE_ASILDI: tam çarpanlama süre/iterasyon bütçesinde bitmedi",
    "SONUC_BELIRSIZ: tanıkları geçen sınır üstü değer için kesin asallık veya tam faktörleme kanıtı yok",
    "KURAL_GECERSIZ: motorun kural verisi yüklenemedi veya yapısal olarak geçersiz",
    "HESAP_TAMAMLANAMADI: beklenmeyen iç hesap hatası"
  ],
  "sinirlar": [
    "İşaret hariç en çok 30 ondalık basamak; mutlak değer en fazla 10^30−1",
    "EBOB-EKOK modunda en fazla 256 sayı desteklenir",
    "büyük yarı-asallarda çarpanlara ayırma başarısız olabilir"
  ]
}
