Bir sayı 3'ün katı ise hesaplama algoritmaları


13

Zihinsel hesaplama yaparken aşağıdakiler yapılabilir:

  • K tamsayısı verildiğinde, tüm basamakları toplayın (taban 10'da) ve sonuç 3'ün katı ise, k 3'ün katıdır.

Benzer şekilde çalışan ancak ikili sayı basamaklarında (bit) çalışan herhangi bir algoritma biliyor musunuz?

  • İlk başta, taban 2'den taban 10'a dönüşümü gerçekleştirmek için dilimin tamsayı ascii'ye dönüştüren hazır fonksiyonlarını kullanmayı ve ardından zihinsel hesap hilesini uygulamayı düşünüyordum. Ama elbette o zaman 2 ila 10 arasındaki baz dönüşümünü kendim de kodlayabilirim. Henüz yapmadım, ama deneyeceğim.

  • Sonra baz 2'deki öklid bölünmesini düşündüm ...

Ancak başka araçlar, algoritmalar olup olmadığını merak ediyorum.


Yanıtlar:


22

Aşağıdaki iki gözlemi düşünün (okuyucuya alıştırma olarak bırakılmıştır):

  1. İkisinin çift güçleri 1 modülondur.
  2. İkisinin garip güçleri -1 modulo 3'tür.

Bir sayının (ikili olarak), yalnızca ve hatta çift konumlardaki bitlerin toplamı, tek konum modülleri 3'teki bitlerin toplamına eşitse üçe bölünebileceği sonucuna varıyoruz.


7
Bu, ondalık onda 11'e bölünebilme kuralı gibidir.
Yuval Filmus

1
@YuvalFilmus: Kesinlikle. Okuyucu için bir alıştırma daha ekleyecektim ama buna karşı karar verdim.
mhum

3
Tamam, onaltılık olarak yazılmış bir sayının 17 (ondalık) ile bölünebilir olup olmadığını öğrenmeye ne dersiniz? Veya bu konu için 15 (ondalık)? ;-)
vonbrand

33

İş için sonlu durum otomatına ne dersiniz?

resim açıklamasını buraya girin

axval(x)x2val(x)+axapa2p+amod3p{0,1,2}a{0,1}x{0,1}bir dizedir, değeri ikili dize olarak değeridir.val(x)N


1
Fikri seviyorum, 9 ile deneyelim. İkili olarak 1001'i besliyorum. İlk bit beni state1'e, sonra state2'ye, sonra state1'e ve state0'a geri gönderir. Durum0, 3'ün katıdır. Ve algoritmanın karmaşıklığı, kullanılan bit sayısıdır, başka bir şey değildir. Bu harika !
Stephane Rolland

Bağlantıdaki bu kavram ilgili mi? Bence daha basit. geomathry.wordpress.com/2017/02/13/0-1-and-a-new-number

1
@WaqarAhmad Evet, ilgili, daha basit değil. Sonlu bir otomattaki geçişler, açıklamanızdaki gibi bir L2R değerlendirmesini tanımlamak için de kullanılabilir. Geçişler , , , , , . Burada üç durumumuz var, bu yüzden devletler için üç sembol gerekli. Sembolleriniz , sırasıyla modulo sayılarının değerlendirmesidir ve L2R değerlendirmenizdeki ilk sembol "durum" dur. Tartışma istiyorsanız, sitede yeni bir soru başlatmak belki daha iyidir! ˉ 0 1= ˉ 1 ˉ 1 0= ˉ 2 ˉ 1 1= ˉ 0 ˉ 2 0= ˉ 1 ˉ 2 1= ˉ 2 Θ,1,01,2,00¯0=0¯0¯1=1¯1¯0=2¯1¯1=0¯2¯0=1¯2¯1=2¯Θ,1,01,2,0
Hendrik Jan

Programlama hakkında değil. Üçlü bir bilgisayarda bu şey daha verimli olacak mı?

4

İkili olarak, 1, 100, 10000 (= 100 × 100), 1000000 (= 100 × 100 × 100) vb. Sayıların hepsi 11'e (üç) böldükten sonra aynı kalanları verir. Bu nedenle, bir ikili sayıyı eşit uzunlukta parçalara ayırırsak , parçaların toplamı orijinal sayıyla aynı kalanı verir.

( Sayıyı bölerken , başlangıca gerektiği kadar sıfır ekleriz . Örneğin, 10111'i 01,01,11 veya 0001,0111 gruplarına bölerdik.)

Matematiksel olarak, sayıyı iki basamaklı gruplara ayırın, ardından grupları ekleyin; ve sonucunuz 00 veya 11 olana kadar tekrarlayın = orijinal sayı üçün katı idi; veya 01 veya 10 = orijinal sayı üçün katı değildi .

Bir bilgisayar programı için, CPU'nuz için sekiz veya on altı veya otuz iki bitlik gruplar kullanmak daha hızlı olabilir . Örneğin, sekiz bitlik ekleme en hızlıysa, tüm baytların toplamını toplayın ve sonuç bir bayta sığana kadar tekrarlayın. Sonra üçe böldükten sonra kalanı belirlemek için bir talimat kullanın.

(Not: Burada imzasız tamsayılar varsayıyoruz . İmzalı bir sayı ile biraz daha fazla ilgilenilmesi gerekiyor. Örneğin 129, 3'ün katlarıdır, ancak -127, imzasız bir bayt olarak eski için 10000001 anlamına gelir ve ikincisini işaretli bayt olarak.)


0

İkiliye özgü olmasa da, şüpheye düşüldüğünde, tekrarlanan çıkarma her zaman kalanlarla bölünmeyi hesaplamak için kesin bir yoldur (ve böylece bir sayı 3'ün katı ise).


2
Tekrarlanan çıkarma kötü bir fikirdir. Geri kalan bölüm çok daha hızlıdır.
Yuval Filmus

3
CPU'da muhtemelen gerçekten çok pahalı, ama -1 :-( hak etmeyen farklı bir algoritma :-)
Stephane Rolland
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.