Sorun bildirimi
Bir dizi benzersiz, ardışık primer seti (zorunlu olarak 2 içermeyen) verilirse, bu primerlerin birinci güçlerinin tüm kombinasyonlarının ürünlerini üretir - örneğin, tekrar yok - ve ayrıca 1. Örneğin, set {2, 3, 5 7}, {1, 2, 3, 5, 6, 7, 10, 14, 15, 21, 30, 35, 42, 70, 105, 210} üretiyorsunuz çünkü:
1 = 1
2 = 2
3 = 3
5 = 5
6 = 2 x 3
7 = 7
10 = 2 x 5
14 = 2 x 7
15 = 3 x 5
21 = 3 x 7
30 = 2 x 3 x 5
35 = 5 x 7
42 = 2 x 3 x 7
70 = 2 x 5 x 7
105 = 3 x 5 x 7
210 = 2 x 3 x 5 x 7
Girdi kümenizin kardinalitesi k ise, bunun çıktı kümenizde 2 ^ k üye vereceğini unutmayın.
Kurallar / Koşullar
- Herhangi bir dili kullanabilirsiniz. Kaynak kodun en küçük karakter sayımını hedefleyin.
- Çözümünüz ya tam bir program ya da tam bir işlev olmalıdır. İşlev isimsiz olabilir (eğer diliniz isimsiz işlevleri destekliyorsa).
- Çözümünüz en az 2 ^ 31 ürüne kadar destek verebilmelidir. Ürününü temsil etmek için çok büyük sayılar iletilirse tamsayı taşması algılaması veya işlenmesi konusunda endişelenmeyin. Ancak, lütfen hesaplamalarınızın sınırlarını belirtiniz.
- Bir listeyi veya bir seti kabul edip bir liste veya bir set oluşturabilirsiniz. Girişin sıralandığını varsayabilir, ancak sıralı çıktı üretmek zorunda değilsiniz.
Arka fon
Bu ne zaman veya neden yararlıdır? Çok kullanışlı bir yer, Kare Formlar Faktorizasyonu olarak bilinen bir tamsayı faktörü algoritmasında paralel olarak yarışacak bir çarpanlar tablosu oluşturmaktır.. Orada, denediğiniz her garip çarpan, algoritmanın başarısız olma olasılığını (bir faktör bulma) sert yarıçaplarda yaklaşık% 50 azaltır. Bu nedenle, paralel olarak yarışacak 16 deneme çarpanı üreten {3, 5, 7, 11} üretim primerleri seti ile algoritma, zor yarı devrelerde zamanın yaklaşık 2 ila 16'sında başarısız olur. Asallar listesine 13 eklenmesi, 32 deneme çarpanı kümesi üreterek, başarısız olma şansını yaklaşık olarak 2 ^ 32'ye düşürür ve sonuçta hesaplama masrafı olmadan sonuçta büyük bir iyileşme sağlar (çünkü paralel olarak iki kat çarpıştığında, ortalama hala aynı toplam adımda cevabı bulur.