x86-64 รหัสเครื่อง 26 ไบต์
31 C9 8D 71 01 89 F8 FF C1 99 F7 F9 85 D2 75 03 0F AF F1 39 F9 7C EE 89 F0 C3
รหัสข้างต้นกำหนดฟังก์ชั่นที่ใช้พารามิเตอร์เดียว (มูลค่าที่ใส่เป็นจำนวนเต็มบวก) ในEDI
(ต่อไปนี้เรียกประชุมระบบวี AMD64ใช้ใน GNU / Unix) และผลตอบแทนที่ได้ผลเพียงครั้งเดียว (ผลิตภัณฑ์ของตัวหาร) EAX
ที่ใน
ภายในก็คำนวณผลิตภัณฑ์ของตัวหารโดยใช้ (ไม่มีประสิทธิภาพมาก) ขั้นตอนวิธีการทำซ้ำคล้ายกับการส่ง C pizzapants184 ของ โดยทั่วไปจะใช้เคาน์เตอร์ห่วงผ่านทั้งหมดของค่าระหว่าง 1 และความคุ้มค่าการป้อนข้อมูลการตรวจสอบเพื่อดูว่าค่าตัวนับปัจจุบันเป็นตัวหารของท่าน ถ้าเป็นเช่นนั้นมันจะคูณมันลงในผลิตภัณฑ์ทั้งหมดที่กำลังทำงานอยู่
คำย่อภาษาแอสเซมบลี Ungolfed:
; Parameter is passed in EDI (a positive integer)
ComputeProductOfDivisors:
xor ecx, ecx ; ECX <= 0 (our counter)
lea esi, [rcx + 1] ; ESI <= 1 (our running total)
.CheckCounter:
mov eax, edi ; put input value (parameter) in EAX
inc ecx ; increment counter
cdq ; sign-extend EAX to EDX:EAX
idiv ecx ; divide EDX:EAX by ECX
test edx, edx ; check the remainder to see if divided evenly
jnz .SkipThisOne ; if remainder!=0, skip the next instruction
imul esi, ecx ; if remainder==0, multiply running total by counter
.SkipThisOne:
cmp ecx, edi ; are we done yet? compare counter to input value
jl .CheckCounter ; if counter hasn't yet reached input value, keep looping
mov eax, esi ; put our running total in EAX so it gets returned
ret
ความจริงที่ว่าIDIV
คำสั่งใช้ตัวถูกดำเนินการแบบ hard-coded สำหรับการจ่ายเงินปันผลเป็นตะคริวสไตล์ของฉันเล็กน้อย แต่ฉันคิดว่านี่เป็นสิ่งที่ดีสำหรับภาษาที่ไม่มี built-in แต่มีพื้นฐานทางคณิตศาสตร์และกิ่งก้านสาขาที่มีเงื่อนไข!