Python kesirli sayıların modu

Merhaba arkadaşlar

pythonda kesirli sayıların modunu nasıl alabiliriz

örn: 2/5 = x mod8 sayısının modu gerçekte (2+8)/5 = 2 iken
python bunu 0,4 olarak veriyor

Sonuç doğru sorun ne?

(2/5) mod 8 alırsan, 0.4 çıkar.

(2+8)/5 yanlış hesaplama.

(2/5)/8 işlemi yapıyorsun.

2/5 = 0,4

0,4 ün mod 8 ini alırsan 8 den küçük olduğundan 0,4 çıkar

(2/5)%8 = 0,4 değişmez. Size ne lazım, ne yapmak istiyorsunuz anlatırsan daha detaylı yardım edebilirim belki.

2 Beğeni

Abi mod işlemine göre sonuç yanlış oluyor
çünkü

2/5 = x mod8 sayısının cebirsel olarak modu iki şekilde alınır

  1. (2+(modu alınan sayının tam bölen yapan ilk katı burada 8*1 = 8 tam bölen))/5 = 2

  2. ((2 mod8) * (5^-1mod8)) (mod8) = 2 * 5 (mod8) = 2

Sen hangi mod işleminden bahsediyorsun?
0.4’ün 8’e bölümünden kalan yine 0.4’tür.

(Bölen * Bölüm) + Kalan = Bölünen
Kalan = Bölünen - (Bölen * Bölüm)
Kalan = Bölünen - (Bölen * (Bölünen // Bölen))
Kalan = 2/5 - (8 * (2/5 // 8))
Kalan = 2/5
1 Beğeni

Düz mantıkla bakarsak bende sizinle aynı şekilde düşünüyorum
Ama 0,4 yani 2/5 ondalıklı(kesirli) bir sayı olduğu için modüler aritmetiğe göre sonuç 0,4 değil “2” olmalı

1 Beğeni

Ama düz mantıkla bakarsak

(4/3)^-43 = (3/4)^43 = 0.0000042426218651 mod(5) = 0 (mod5) buda yanlış sonuç

Cahilliğimi mazur görün, sayenizde yeni bir şey öğrendim.

Üssüz kesirli sayılar için şöyle basit bir fonksiyon oluşturabilirsiniz.

def mod(numerator, denominator, divisor):
    while (numerator / denominator) != (numerator // denominator):
        numerator += divisor

    return (numerator / denominator)

print(mod(2, 5, 8))
# >>> 2.0

ESTAĞFURULLAH ABİ NE CAHİLLİĞİ,

OLUŞTURDUĞUNUZ FONKSİYON İÇİN TEŞEKKÜR EDERİM.

KESİR ÜSLÜ OLUNCA FONKSİYON HATA VERİYOR

HATTA SAYILARI DEĞİŞTİRİNCE ÜSLÜ OLMASA BİLE YİNE HATA VERİYOR

ÖRNEĞİN 147/6 MOD19 SONUÇ 15 OLMASI GEREKİRKEN SONUCU 34 YANİ 15+19 OLARAK VERİYOR
77/2 MOD17 SONUCUN 13 OMASI GEREKİRKEN 47 VERİYOR 13+17+17

ACABA PYTHON İÇİNDE GÖMÜLÜ “%” OPERATÖRÜ GİBİ VS BİR KOMUT VARMI ?

Evet soruya böyle başladık. Kesirli modüler artimetik sorusu gibi ve tahminen modul operatöründen ne beklediğini ve ne elde ettiğini tahmin ettim.

Adının modül operatörü olması tüm cebirsel modül alma işlemlerini yapabileceği anlamına gelmez. Benzer sorunları, toplama çarpma bölme önceliklerinde de yaşayabilirsin.

Bu nedenle asıl sorunu öğrenmem gerekiyordu.

Aklıma gelen başıma geldi. Soru, rasyonel sayıların negatif üstlerinin hesaplanmasına kadar geldi.

:slight_smile:

Doğrudan bu işlemi yapabilen bir operatör yok, belki araştırırsan, biri bir kütüphane fonksiyonu yazmış olabilir ve ona denk gelebilirsin.

Expressing a fraction as a natural number under modulo ‘m’ - GeeksforGeeks

Buradaki örneği;

Senin (2/5) mod 8 e göre değer atayarak vereyim.

# Python3 implementation of the approach
m = 8
 
# Function to return the GCD
# of given numbers
def gcd(a, b):
 
    if (a == 0):
        return b
    return gcd(b % a, a)
 
# Recursive function to return (x ^ n) % m
def modexp(x, n):
 
    if (n == 0) :
        return 1
     
    elif (n % 2 == 0) :
        return modexp((x * x) % m, n // 2)
     
    else :
        return (x * modexp((x * x) % m,
                           (n - 1) / 2) % m)
 
 
# Function to return the fraction modulo mod
def getFractionModulo(a, b):
 
    c = gcd(a, b)
 
    a = a // c
    b = b // c
 
    # (b ^ m-2) % m
    d = modexp(b, m - 2)
 
    # Final answer
    ans = ((a % m) * (d % m)) % m
 
    return ans
 
# Driver code
if __name__ == "__main__":
 
    a = 2
    b = 5
 
    print ( getFractionModulo(a, b))

Bu kod rasyonel sayıların cebirsel modül işlemi için kullanılabilir.

Bunun üzerinden üstlü hesaplamalarına da ulaşabilirsin belki.

3 Beğeni

Abi teşekkür ederim
Gayet güzel çalışıyor

Orijinal soruyu/odevi gorme istememizin bir nedeni bu tur hatalar.

Burada (4/3)^(-43) ≡ x (mod 5) diyor, = degil. Buradaki iliski congruence, esitlik degil. “mod 5” de congruence sinifi, modulus operatoru degil.

Moduler aritmetige gore sonuc 0.4. Biz congruent tamsayi ariyoruz:

2 * 5^-1 ≡ x (mod 8)
2 * modinv(5, 8) ≡ x (mod 8)
(2%8 * modinv(5, 8)%8) % 8 = x

2 Beğeni

Abi cevabınız için teşekkür ederim
yavaş yavaş bu programı da çözeceğiz inş