Mathematica、70 69バイト
1##&@@(Prime[BitXor[PrimePi@#+1,1]-1]^#2&)@@@FactorInteger@#/._@_->1&
整数を受け取って返す名前のない関数。入力時にエラーをスローします1が、正しい結果を計算します。
説明
いつものように、すべての構文糖のために、読み上げ順序は少しおかしいです。&右定義無名関数とその引数には、で参照されている#、#2、#3、等
...FactorInteger@#...
入力を因数分解することから始めます。これにより、ペアのリストが得られます。{prime, exponent}たとえば、入力12はを与え{{2, 2}, {3, 1}}ます。やや不便、1提供します{{1, 1}}。
(...&)@@@...
これは、左側の関数をレベル1の整数のリストに適用します。つまり、関数は各ペアに対して呼び出され、素数と指数を別々の引数として渡し、結果のリストを返します。(これはリスト上で関数をマッピングするのと似ていますが、2つの個別の引数を受け取るほうがペアを受け取るよりも便利です。)
...PrimePi@#...
built-inを使用して、(プライム)入力までのプライムの数を計算しPrimePiます。これにより、素数のインデックスが得られます。
...BitXor[...+1,1]-1...
結果はインクリメントされ、XORされ1、再びデクリメントされます。これは1 <-> 2, 3 <-> 4, 5 <-> 6, ...、すべての1ベースのインデックスを交換します。入力がそのノート1もたらす0ためPrimePi、その後にマッピングされ-1、このプロセスにおいて。後で対処します。
...Prime[...]^#2...
次に、正しく交換された素数であるn番目の素数(nは前の計算の結果)を取得し、入力の因数分解で元の素数の累乗に上げます。この時点でPrime[-1]エラーがスローされますが、評価されずに返されます。この場合のパワーは、これ1までのプロセス全体{Prime[-1]}が入力1と、他のすべての入力の正しいプライムパワーのリストを生成することです。
1##&@@...
次に、すべての素数の累乗を増やします。機能の1##&ための標準的なゴルフのトリックですTimes。仕組みについては、このヒント(「引数のシーケンス」セクション)を参照してください。
最後に、1上記のすべてが結果となった入力を処理する必要がありPrime[-1]ます。単純な置換ルールで簡単に修正できます。はのf@x略であることに注意してくださいf[x]。そのフォームの任意の式と一致させ(他のすべての結果は整数、つまりアトミック式であるため)、それをaに置き換えたいだけです1。
.../._@_->1
ここで、/.は、の略でReplaceAll、あらゆる_@_形式のパターンf[x](つまり、単一の子を持つ複合式)であり、->1「置換」と言い1ます。