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
এটি অনলাইন চেষ্টা করুন!