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 นั่นคือฟังก์ชั่นนี้ถูกเรียกใช้สำหรับแต่ละคู่ผ่านไพรม์และเลขชี้กำลังในรูปแบบอาร์กิวเมนต์แยกต่างหากจากนั้นส่งกลับรายการผลลัพธ์ (สิ่งนี้คล้ายกับการทำแผนที่ฟังก์ชั่นเหนือรายการ แต่การรับอาร์กิวเมนต์สองตัวแยกกันนั้นสะดวกกว่าการรับคู่)
...PrimePi@#...
เราคำนวณจำนวน primes และรวมถึง (ที่สำคัญ) PrimePiการป้อนข้อมูลที่ใช้ในตัว สิ่งนี้ทำให้เรามีดัชนีของนายก
...BitXor[...+1,1]-1...
ผลลัพธ์จะเพิ่มขึ้น XOR'ed ด้วย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"