Golfscript, 68 67 62 61 karakter
[.]({[.2@{1$1$%{)}{\1$/1$}if}*;;].,*0+{+}*.2$?@@.@+\@)!}do;,(
Bu bir ifadedir: nyığını alır ve sonucu yığın üzerinde bırakır. nStdin'den alınan ve sonucu stdout'a yazdıran bir programa dönüştürmek için [,~
Kalbi [.2@{1$1$%{)}{\1$/1$}if}*;;](28 karakter) yığının en üst sayısını alır ve (inanılmaz derecede verimsiz bir algoritma ile) asal faktörlerinin bir listesini oluşturur. C tarzı sözde kod eşdeğeri:
ps = [], p = 2;
for (int i = 0; i < n; i++) {
if (n % p == 0) {
ps += p;
n /= p;
}
else p++;
}
0+Hemen önce {+}*özel durum işlemek için olan n==1Golfscript boş liste üzerinde bir ikili işlem katlama gibi değil, çünkü.
Asal olmayan sabitleme noktalarından biri 27'dir; Ben bunu bir == p (a-1) / 2 ise bir düzeltme noktası olan eşleme (p a -> a 2 p) düşünerek ve küçük çalışarak programı kullanmadan buldum . ( Asal fiksasyonunu verir).aa==1
Programla arama yapmak ikinci bir düzeltme noktası açar: 30 = (2 + 3 + 5) * 3
Ek: yalnızca iki asal olmayan sabitleme noktası olduğunun kanıtı
İşaretleme: Tekrarlama ile sopfr(x)ilgili başlıca faktörlerin toplamıdır x(A001414). (A001222) ' Omega(x)nin ana faktörlerinin xsayısıdır. Higley halefi işlevih(x) = sopfr(x) Omega(x)
Diyelim ki bir asal N = h(N)ürün olan bir sabitleme noktamız var n=Omega(N).
N = p_0 ... p_{n-1} = h(N) = n (p_0 + ... + p_{n-1})
Temel sayı teorisi: nbölünür p_0 ... p_{n-1}, bu nedenle w=Omega(n)bu asallar asal faktörlerdir n. Wlog, onları sonuncu olacağız w. Böylece her iki tarafı da bölebilir nve
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-1}
veya
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-w-1} + sopfr(n)
Asal tüm göz önüne alındığında p_0için p_{n-w-1}bunlardan herhangi LHS daha RHS daha artar artan 1'den büyüktür. Böylece belirli bir naday için tüm aday çözümleri sıralayabiliriz.
Özellikle, LHS RHS'den büyükse, tüm "serbest" primerleri 2'ye ayarlayan bir çözüm olamaz. Yani
2^{n-w} > 2 (n-w) + sopfr(n)
Çünkü sopfr(n) <= n(sadece n = 4 veya n prime için eşitlikle), eğer varsa, herhangi bir sabitleme noktası olmadığını daha zayıf bir şekilde ifade edebiliriz.
2^{n-w} > 3 n - 2 w
Holding, wbiz farklı değerlerini seçebilirsiniz sabit ntatmin w=Omega(n). En küçük Böyle nolduğu 2^w. Eğer Not bu 2^{n-w}en az 3 olan (diğer bir deyişle, eğer n-w>1doğru olan ise n>2) daha sonra artan ntutarken wsabit daha RHS daha LHS artacaktır. Ayrıca, w>2mümkün nolan en düşük düzeyde ve eşitsizliğin karşılandığına ve hiçbir sabitleme noktasının bulunmadığına dikkat edin.
Bu bizi üç davaya bırakır: w = 0ve n = 1; w = 1ve nasaldır; veya w = 2ve nyarı asaldır.
Olgu w = 0. n = 1, Nherhangi bir asal.
Olgu w = 1. Eğer n = 2öyleyse N = 2pve ihtiyacımız var p = p + 2, bunun çözümü yok. Eğer n = 3öyleyse pq = p + q + 3ve iki çözümümüz var (p=2, q=5)ve (p=3, q=3). Eğer n = 5öyleyse 2^4 > 3 * 5 - 2 * 1, başka çözüm yoktur w = 1.
Olgu w = 2. Eğer n = 4öyleyse N = 4pqve ihtiyacımız var pq = p + q + 4. Bunun tamsayı bir çözümü vardır p=2, q=6, fakat asal bir çözümü yoktur. Eğer n = 6öyleyse 2^4 > 3 * 6 - 2 * 2, başka çözüm yoktur w = 2.
Tüm vakalar tükendi, bu nedenle tek asal olmayan sabitleme noktaları 27 ve 30'dur.
highley(1) == 1? 4 sonuçlanan listesi) yani biri hiçbir asal çarpanları vardır[1, 0]bu yüzden,highley(1) == 2gördüğüm kadarıyla.