Arka fon
Son kez, önemsiz bir sorun olan belirli bir boyuttaki grupları saydık .
Bu sefer sadece Abel gruplarını , yani değişmeli operasyonu olan grupları sayacağız . Biçimsel olarak, bir grup (G *) değişmeli ise x * y = Y * X tüm için x, y olarak G .
Sorun bu şekilde çok daha basit hale geliyor, bu yüzden onları verimli bir şekilde sayacağız.
Görev
Negatif olmayan bir tamsayıyı n girdi olarak kabul eden ve izomorfik olmayan Abelian sipariş n'nin sayısını basan veya döndüren bir program veya işlev yazın .
A (n) ile ifade edeceğimiz grup sayısını hesaplamanın bir yolu aşağıdakileri gözlemlemektir:
A (0) = 0
Eğer p bir asal, A (p k ) tamsayı bölümlerin sayısı eşittir k . ( krş . OEIS A000041 )
Eğer , n = mk ve m ve k eş asal, A (n) = ve A (m) bir (k) .
Bunu veya A (n) 'yi hesaplamak için başka herhangi bir yöntemi kullanabilirsiniz .
Test senaryoları
Input Output
0 0
1 1
2 1
3 1
4 2
5 1
6 1
7 1
8 3
9 2
10 1
11 1
12 2
13 1
14 1
15 1
16 5
17 1
18 2
19 1
20 2
4611686018427387904 1300156
5587736968198167552 155232
9223371994482243049 2
( OEIS A000688'den alınmıştır )
Ek kurallar
Yeterli zaman, RAM ve girişi tutabilen bir kayıt boyutu verildiğinde, kodunuz keyfi olarak büyük tamsayılar için çalışmalıdır (teoride).
Kodunuz tüm tamsayılar arasındaki için çalışmalıdır 0 ve 2 63 - 1 benim makinede 10 dakika (Intel i7-3770, 16 GiB RAM, Fedora 21) altında ve bitiş.
Lütfen yanıtınızı göndermeden önce kodunuzu son üç test vakası için zamanladığınızdan emin olun.
Mathematica'nınki gibi bu görevi önemsizleştiren yerleşik
FiniteAbelianGroupCount
yapılara izin verilmez.Bir sayının tamsayı bölümlerini veya bir listenin bölümlerini döndüren veya sayan yerleşik öğelere izin verilmez.
Standart kod golf kuralları geçerlidir.