Hội x86-64, 57 55 byte
Tôi mới chơi golf, vì vậy ý kiến / phản hồi được đánh giá cao.
Lưu ý: điều này được tối ưu hóa cho chiều dài mã máy, không phải chiều dài nguồn.
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
Xác định hàm, sử dụng quy ước chuẩn (nghĩa là giá trị trả về trong eax, đối số đầu tiên trong edi, tất cả các thanh ghi người gọi được lưu ngoại trừ ebx) lấy một số nguyên 32 bit không dấu và trả về m nhỏ nhất, v.v.
Nguồn:
.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
Hãy thử trực tuyến!