x86-64 विधानसभा, 57 55 बाइट्स
मैं गोल्फ के लिए नया हूं, इसलिए टिप्पणियों / प्रतिक्रिया की सराहना की जाती है।
नोट: यह मशीन कोड लंबाई के लिए अनुकूलित है, स्रोत लंबाई के लिए नहीं।
0: 89 f8 ff cf 74 32 97 89 fe 89 f1 ff c6 89 f0 99
1: f7 f1 85 d2 e0 f7 85 c9 75 ed 89 f9 ff c9 56 29
2: fe 56 57 51 89 fc e8 d3 ff ff ff 59 5f 5e 39 c6
3: e0 ef 96 5e 74 d1 c3
एक फ़ंक्शन को परिभाषित करता है, मानक कन्वेंशन (यानी ईएक्स में रिटर्न वैल्यू, ईडीआई में पहला तर्क, ईबेक्स को छोड़कर सभी रजिस्टरों को सहेजा गया) का उपयोग करके, जो एक अहस्ताक्षरित 32-बिट पूर्णांक लेता है और सबसे छोटा एम आदि लौटाता है।
स्रोत:
.globl a083569
// edi = original, probably don't touch
// esi = candidate prime, if it's not a repeat we return edi-this
a083569:
mov %edi, %eax
dec %edi
jz end
xchg %eax, %edi
mov %edi, %esi
primecheck:
mov %esi, %ecx
inc %esi
primeloop:
mov %esi, %eax
cdq
div %ecx
test %edx, %edx
loopnz primeloop
/* end */
// if esi isn't prime, then ecx is now one or greater.
test %ecx, %ecx
jnz primecheck
// esi is now our target prime: check if it's not already one
mov %edi, %ecx
dec %ecx
push %rsi /* we need a flag-safe way to restore this later */
sub %edi, %esi
chkdup:
push %rsi
push %rdi
push %rcx
mov %ecx, %edi
call a083569
pop %rcx
pop %rdi
pop %rsi
cmp %eax, %esi
loopne chkdup
/* end loop - chkdup */
xchg %esi, %eax
pop %rsi
je primecheck
/* end outer loop - primecheck */
end:
ret
इसे ऑनलाइन आज़माएं!