Böyle basit bir soru sormaktan utanıyorum. Görevim iki hafta daha başlamıyor, bu yüzden bir profesöre soramıyorum ve gerilim beni öldürecekti.
Neden 2 mod 4 = 2?
Böyle basit bir soru sormaktan utanıyorum. Görevim iki hafta daha başlamıyor, bu yüzden bir profesöre soramıyorum ve gerilim beni öldürecekti.
Neden 2 mod 4 = 2?
Yanıtlar:
Modulo (mod,%) Kalan operatörüdür.
2%2 = 0 (2/2 = 1 remainder 0)
1%2 = 1 (1/2 = 0 remainder 1)
4%2 = 0 (4/2 = 2 remainder 0)
5%2 = 1 (5/2 = 2 remainder 1)
U muz ve bir grup insan kullanırsanız çok daha kolay.
Diyelim ki 1 muzunuz ve 6 kişilik bir grubunuz var, bunu ifade edersiniz: 1 mod 6
/ 1 % 6
/ 1 modulo 6
.
Gruptaki her insanın iyi beslenmesi ve mutlu olması için 6 muz gerekir.
Bu nedenle, 1 muzunuz varsa ve 6 kişiyle paylaşmanız gerekiyorsa, ancak her grup üyesi için 1 muzunuz varsa, yani 6 kişiniz varsa paylaşabilirsiniz, o zaman 1 muzunuz olacaktır (kalan, kimseyle paylaşılmaz) aynı) 2 muz için de geçerlidir. Sonra kalan 2 muz olacak (hiçbir şey paylaşılmaz).
Ancak 6 muz aldığınızda, mutlu olmalısınız, çünkü o zaman 6 kişilik gruptaki her üye için 1 muz vardır ve 6 kişiyi de 6 muzda paylaştığınızda kalan 0 veya hiç muz kalmamıştır.
Şimdi, 7 muz ve gruptaki 6 kişi için, o zaman sahip olacaksınız 7 mod 6 = 1
, çünkü her birine 6 kişiye 1 muz verdiniz ve kalan 1 muz.
İçin 12 mod 6
6 kişi paylaşılan muz ya da 12, her biri bir ya da iki muz olacaktır, ve geri kalan daha sonra 0 olduğu.
Bu konuda da kafam karıştı, sadece birkaç dakika önce. Sonra bölünmeyi uzun bir kağıt parçası üzerinde yaptım ve mantıklı geldi:
Bilgisayarın bu sorunu çözeceği kadarıyla. Bilgisayar orada durur ve 2 değerini döndürür, bu da mantıklıdır çünkü "%" (mod) bunu ister.
Ondalık sayı koymak ve devam etmek için eğitildik, bu yüzden ilk başta mantıksız olabilir.
Birisi benimle iletişime geçti ve sorunun yorumunda cevabımı daha ayrıntılı olarak açıklamamı istedi. İşte bu kişiye, başkalarına yardımcı olması durumunda yanıtladığım şey:
Modulo işlemi size öklid disivyonunun geri kalanını verir (ki bu sadece gerçek sayılarla değil, tamsayı ile çalışır). A = B * C + D (D <B ile) olacak şekilde A'ya sahipseniz, A'nın B'ye ait öklid bölümünün bölümü C'dir ve geri kalanı D'dir. 2'yi 4'e bölerseniz bölüm 0 ve geri kalan 2'dir.
Diyelim ki A nesneleriniz var (kesemeyeceğiniz). Ve bu nesnelerin aynı miktarını B insanlarına dağıtmak istiyorsunuz. B'den fazla nesneniz olduğu sürece, her birine 1 verip tekrarlayın. B'den az nesneniz kaldığında, kalan nesneleri durdurup saklarsınız. İşlemi tekrarladığınız süre, diyelim ki bu C sayısını diyelim. Sonunda tuttuğunuz nesne sayısı, buna D diyelim, geri kalanı.
2 nesne ve 4 kişi varsa. Zaten 4'ten az nesneniz var. Böylece her insan 0 nesne alır ve siz 2 tutarsınız.
Bu yüzden 2 modulo 4 2'dir.
mod, bölündüğü zaman rayba anlamına gelir. Yani, 2'ye 4 bölü 0, 2'si kalmıştır. Bu nedenle 2 mod 4 2'dir.
Modulo, matematiksel bölünme ifadesinin bir tamsayı olarak ifade edilen geri kalan kısmıdır.
Öyleyse, ekranın 100 piksel genişliğinde 90 konumunda bir pikseliniz olduğunu ve 20 ekleyeceğinizi varsayalım. 10 konumuna sarılır. Neden ... çünkü 90 + 20 = 110 bu nedenle% 110 100 = 10.
Bunu anlamak için modülonun kesirli sayının tamsayı temsili olduğunu düşünüyorum. Dahası, ifadeyi geriye doğru yaparsanız ve kalanını kesirli bir sayı olarak işlerseniz ve bölene eklerseniz, size orijinal cevabınızı verecektir.
Örnekler:
100
(A) --- = 14 mod 2
7
123
(B) --- = 8 mod 3
15
3
(C) --- = 0 mod 3
4
Tersine mühendislik:
2 14(7) 2 98 2 100
(A) 14 mod 2 = 14 + --- = ----- + --- = --- + --- = ---
7 7 7 7 7 7
3 8(15) 3 120 3 123
(B) 8 mod 3 = 8 + --- = ----- + --- = --- + --- = ---
15 15 15 15 15 15
3 3
(B) 0 mod 3 = 0 + --- = ---
4 4
Bence modulo denkleminin nasıl okunduğu konusunda kafanız karışıyor.
Böyle bir bölünme denklemi yazdığımızda 2/4
, 2'yi 4'e bölüyoruz.
Bölündüğümüz gibi bir modulo denklemi 2 % 4
yazıldığında 2 by 4
(4 üzerinden 2'yi düşünün) ve geri kalanını geri veriyoruz .
MOD geri kalan operatördür. Bu nedenle 2 mod 4 kalan olarak 2 verir. 4 * 0 = 0 ve sonra 2-0 = 2. Daha anlaşılır kılmak için 6 mod 4 veya 8 mod 3 ile aynı işlemi yapmaya çalışın.
Bu Öklid Algoritması.
Örneğin
a mod b = k * b + c => a mod b = c, burada k bir tam sayı ve c cevaptır
4 mod 2 = 2 * 2 + 0 => 4 mod 2 = 0
27 mod 5 = 5 * 5 + 2 => 27 mod 5 = 2
yani cevabın
2 mod 4 = 0 * 4 + 2 => 2 mod 4 = 2
İçin:
2 mod 4
Biraz düşündükten sonra bulduğum bu küçük formülü kullanabiliriz, belki de bilmediğim bir yerde tanımlanmış ama benim için çalışıyor ve gerçekten kullanışlı.
A mod B = C
C cevabı nerede
K * B - A = |C|
K, B'nin A'ya kaç kez uyduğu
2 mod 4
olabilir:
0 * 4 - 2 = |C|
C = |-2| => 2
Umarım sizin için çalışır :)
Bir modüloya cevap vermek için x % y
iki soru soruyorsunuz:
A- Kalan olmadan kaç kez y
giriyor x
? % 2 4 için bu 0'dır.
B- Bundan geri almak için ne kadar eklemeniz gerekiyor x
? 0'dan 2'ye geri dönmek için 2-0, yani 2'ye ihtiyacınız olacak.
Bunlar şöyle bir soruda özetlenebilir: x
tarafından bölünmenin tamsayı-ish sonucuna y
geri dönmek için ne kadar eklemeniz gerekecek x
?
Tamsayı-ish ile ilgilenilen kesirler değil sadece tam sayılar kastedilmektedir.
Bir kesirli bölme kalanı (örn., 283849) modulo ile ilgilenmez, çünkü modulo sadece tamsayı sayılarıyla ilgilidir.
Bunu düşünmenin görsel bir yolu için, özel örneğinizde, 12 yerine 4'e giden bir saat yüzü hayal edin. Eğer saat 4'te başlarsanız (sıfırdan başlamak gibidir) ve saat yönünde 2 "saat", 2 inmek, tıpkı 6 "saat" için saat yönünde dolaşmak gibi 2 de inecek (2 mod 4 == 2 gibi 6 mod 4 == 2).
Bu modr () işlevinden bahsetmek için iyi bir zaman olabilir. Bir bölümün hem tamamını hem de geri kalan kısımlarını döndürür.
print("\n 17 // 3 =",17//3," # Does the same thing as int(17/3)")
print(" 17 % 3 =",17%3," # Modulo division gives the remainder.")
whole, remain = divmod(17,3)
print(" divmod(17,3) returns ->",divmod(17,3),end="")
print(" because 3 goes into 17,",whole,"times with a remainder of",remain,end=".\n\n")
2 = 0 * 4 + 2
.