Bazen, bir programı yazarken, bir neden veya başka bir sebep için bir asal sayı kullanmanız gerekir (örneğin kriptografi). Bazen bir kompozit sayı kullanmanız gerektiğini düşünüyorum. Bazen, en azından burada PPCG'de programınız isteğe bağlı değişikliklerle başa çıkabilmelidir. Ve ilginç bir PPCG sorusu yapmaya elverişli durumlarda, belki de kullandığınız sayıların bile yolsuzluğa karşı dayanıklı olması gerekir…
Tanımlar
Bir bileşik sayı o 1. A 'den büyük iki küçük tamsayılar ürünüdür, yani asal olmayan bir tamsayı ≥ 4 olan bitflip dayanıklı kompozit sayı şu şekilde tanımlanır: Eğer yazarsanız, bir kompozit pozitif tamsayı var Mümkün olan en az bit sayısında ikili olarak, herhangi bir veya iki biti, sayıdan değiştirebilirsiniz ve sayı hala birleşiktir.
Örnek
Örneğin, 84 sayısını düşünün. İkili olarak, bu 1010100
. Ondan en fazla 2 bit farklılık göstermeyen tüm sayılar:
0000100 4 2 × 2 0010000 16 4 × 4 0010100 20 4 × 5 0010101 21 3 × 7 0010110 22 2 × 11 0011100 28 4 × 7 0110100 52 4 × 13 1000000 64 8 × 8 1000100 68 4 × 17 1000101 69 3 × 23 1000110 70 7 × 10 1001100 76 4 × 19 1010000 80 8 × 10 1010001 81 9 × 9 1010010 82 2 × 41 1010100 84 7 × 12 1010101 85 5 × 17 1010110 86 2 × 43 1010111 87 3 × 29 1011000 88 8 × 11 1011100 92 4 × 23 1011101 93 3 × 31 1011110 94 2 × 47 1100100 100 10 × 10 1110000 112 8 × 14 1110100 116 4 × 29 1110101 117 9 × 13 1110110 118 2 × 59 1111100 124 4 × 31
İlk sütun, ikilideki sayıdır; ikinci sütun ondalık sayıdır. Üçüncü sütunun işaret ettiği gibi, bu sayıların tümü birleşiktir. Bu nedenle, 84 bit kaymasına dirençli bir kompozit sayıdır.
Görev
Aşağıdaki üç program veya fonksiyondan birini yazmalısınız, hangisi diliniz için en anlamlı olanıdır:
- Negatif olmayan bir tamsayı alan bir program veya fonksiyon n girdi olarak ve ilk çıkış olarak N bitflip dirençli bileşik numaraları.
- Negatif olmayan bir tamsayıyı alan bir program veya fonksiyon , n girdi olarak ve daha az tüm bitflip dirençli bileşik numaraları verir n (veya daha az, tercih ya da eşit olması halinde n , yani seçebilir n bitflip ise çıkış dahildir dayanıklı).
- Giriş almayan ve tüm bit-fllip dirençli kompozit sayıları çıkartan bir program veya işlev. (Bu, program çalışırken stdout, tembel bir liste veya bir jeneratör gibi, hala çalışıyorken çıktı üretebilecek bir çıktı mekanizması kullanmalıdır; tüm listeyi hesaplayamaz ve sonra yazdıramazsınız.)
Test durumları
İşte ilk bit bitip dirençli kompozit sayılar:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Açıklamalar
- Sadece ürettiğiniz rakamlara, bit kliplerine karşı dayanıklı olması gerekir. Bu, bit bitlerine karşı onları bulan programı bulmaya yönelik bir görev değil; Programın kendisinde dilediğiniz sayıları kullanın.
- Çıktı aldığınız sayılar "baştaki sıfırlar" içindeki bir bit kaymasına karşı dayanıklı olmak zorunda değildir; sayıların mümkün olan en az sayıda bitte saklanacağını ve sadece bu bitlerin çevrilmeye karşı bağışık olması gerektiğini hayal edin. Ancak, çıktı aldığınız sayılardaki ilk 1 bit, bit kliplere karşı bağışık olmak zorundadır.
- Doğru sonucu üreten herhangi bir algoritmayı kullanın; Burada verimlilik konusunda işaretli değilsin.
- Sonunda bit bitmeye karşı dirençli birçok kompozit sayı olduğunu ispat ederseniz, a) çıktı formatındaki kısıtlamalar kaldırılır ve b) listeye kodlamaya izin verilir (muhtemelen sadece hesaplamaktan daha ayrıntılı olsa da). Bu kural çoğunlukla sadece bütünlük içindir; İlgili olmasını beklemiyorum.
Zafer durumu
Bu kod golf , normalde olduğu gibi, daha kısa. Her zamanki gibi, programın uzunluğu bayt olarak ölçülecektir.
n
olup olmadığını ekleyebilir miyimn
? (yani "n'den küçük ya da ona eşit yap"?)