Golfscript、68 67 62 61文字
[.]({[.2@{1$1$%{)}{\1$/1$}if}*;;].,*0+{+}*.2$?@@.@+\@)!}do;,(
これは式です。nスタックを受け取り、結果をスタックに残します。nstdinから結果をstdoutに出力するプログラムに変換するには、先頭[を次のように置き換えます。~
その中心は[.2@{1$1$%{)}{\1$/1$}if}*;;](28文字)で、スタックのトップの数値を取り、(非常に非効率的なアルゴリズムによって)その素因数のリストを生成します。同等のCスタイルの擬似コード:
ps = [], p = 2;
for (int i = 0; i < n; i++) {
if (n % p == 0) {
ps += p;
n /= p;
}
else p++;
}
0+直前には、{+}*特殊なケースを処理することですn==1Golfscriptは空のリストの上に二項演算折りたたみ好きではないので、。
非素数の不動点の1つは27です。プログラムを使用せずにこれを見つけたのは、a == p (a-1)/ 2の場合の固定点であるマッピング(p a -> a 2 p)を考慮し、小さなを試したところです。(素数の不動点を与える)。aa==1
プログラムで検索すると、2番目の固定点が表示されます。30=(2 + 3 + 5)* 3
付録:プライム以外のフィックスポイントが2つしかないことの証明
表記:sopfr(x)は、x繰り返し(A001414)を伴うの素因数の合計です。(A001222)のOmega(x)素数の数ですx。したがって、ヒグレー後継関数はh(x) = sopfr(x) Omega(x)
素数のN = h(N)積である不動点があるとしますn=Omega(N)。
N = p_0 ... p_{n-1} = h(N) = n (p_0 + ... + p_{n-1})
基本的な数論:にn分割するp_0 ... p_{n-1}のでw=Omega(n)、これらの素数のうちはの素数ですn。それらを最後にするためのブログw。だから私たちは両側を分けて得ることができnます
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-1}
または
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-w-1} + sopfr(n)
素数のすべてのことを考えるp_0ためにp_{n-w-1}それらのいずれかがLHS以上RHSより高く上げる、1よりも大きいです。したがって、特定のについて、nすべての候補ソリューションを列挙できます。
特に、LHSがRHSよりも大きく、すべての「フリー」プライムが2に設定されている場合、解決策はありません。
2^{n-w} > 2 (n-w) + sopfr(n)
以来sopfr(n) <= n(のみのn = 4またはNの素数のための平等と)、私たちは何fixpoints場合が存在しないこと弱い声明を出すことができます
2^{n-w} > 3 n - 2 w
ホールディングは、w我々は異なる値を選択することができ、固定n満足をw=Omega(n)。最小のものnは2^wです。が2^{n-w}3以上の場合(つまり、の場合n-w>1はtrue n>2)、定数nを保持しながらw増加すると、RHSよりもLHSが増加することに注意してください。また、w>2可能な限り最小nの不等式が満たされ、不動点がないことにも注意してください。
:3例と葉たちをそれw = 0とn = 1。w = 1そしてn素数です。またはw = 2、nセミプライムです。
ケースw = 0。n = 1、そうN素数です。
ケースw = 1。場合はn = 2、その後N = 2p、我々は必要としp = p + 2、その解がありません。場合はn = 3、その後、私たちは持っているpq = p + q + 32つの溶液、(p=2, q=5)および(p=3, q=3)。場合はn = 5、その後2^4 > 3 * 5 - 2 * 1、そうでそれ以上の解決策はありませんw = 1。
ケースw = 2。もしn = 4それがN = 4pq必要な場合pq = p + q + 4。これには整数解がp=2, q=6ありますが、主要な解はありません。場合はn = 6、その後2^4 > 3 * 6 - 2 * 2、そうでそれ以上の解決策はありませんw = 2。
すべてのケースが使い果たされているため、非素数の固定点は27と30のみです。
highley(1) == 1?4での結果のリスト)があるので、一つは、何の素因数を持っていない[1, 0]ので、highley(1) == 2私はそれを見るように。