আমার নীচের ওয়ার্কিং কোড রয়েছে:
largest_prime=1
for number_under_test in {1..100}
do
is_prime=true
factors=''
for ((divider = 2; divider < number_under_test-1; divider++));
do
remainder=$(($number_under_test % $divider))
[ $remainder == 0 ] && [ is_prime ] && is_prime=false && factors+=$divider' '
done
[ $is_prime == true ] && echo "${number_under_test} is prime!" || echo "${number_under_test} is NOT prime (factors= $factors)" [ $is_prime == true ] && largest_prime=$number_under_test
done
printf "\nLargest Prime= $largest_prime\n"
এই কোডটি দ্রুত রান হয় 0.194 সেকেন্ড। তবে আমি && is_prime= false
পড়তে কিছুটা কঠিন পেয়েছি এবং এটি (প্রশিক্ষণহীন চোখের দিকে) দেখতে পেল যাতে এটি পরীক্ষিত হওয়ার পরিবর্তে এটি পরীক্ষা করা হচ্ছে যা এটি কি করে। তাই আমি পরিবর্তিত চেষ্টা &&
একটি মধ্যে if...then
14,48 সেকেন্ডে কিন্তু 75 বার ধীর - এবং এই কাজ করে। এটি উচ্চ সংখ্যায় সবচেয়ে লক্ষণীয়।
largest_prime=1
for number_under_test in {1..100}
do
is_prime=true
factors=''
for ((divider = 2; divider < number_under_test-1; divider++));
do
remainder=$(($number_under_test % $divider))
if ([ $remainder == 0 ] && [ $is_prime == true ]); then
is_prime=false
factors+=$divider' '
fi
done
[ $is_prime == true ] && echo "${number_under_test} is prime!" || echo "${number_under_test} is NOT prime (factors= $factors)" [ $is_prime == true ] && largest_prime=$number_under_test
done
printf "\nLargest Prime= $largest_prime\n"
অলসতা ছাড়া ব্লকের স্পষ্টতা আছে কি?
আপডেট (1/4/2015 10:40 am EST)
দুর্দান্ত প্রতিক্রিয়া! আমি এখন নিম্নলিখিত ব্যবহার করছি। অন্য কোন প্রতিক্রিয়া ?
largest_prime=1
separator=' '
for number_under_test in {1..100}; {
is_prime=true
factors=''
for ((divider = 2; divider < (number_under_test/2)+1; divider++)) {
remainder=$(($number_under_test % $divider))
if [ $remainder == 0 ]; then
is_prime=false
factors+=$divider' '
fi
}
if $is_prime; then
printf "\n${number_under_test} IS prime\n\n"
largest_prime=$number_under_test
else
printf "${number_under_test} is NOT prime, factors are: "
printf "$factors\n"
fi
}
printf "\nLargest Prime= $largest_prime\n"
number_under_test/2
পরিবর্তে কেবল পুনরায় করা হবে number_under_test-1
: একটি সংখ্যার এন এর কোনও ফ্যাক্টর এন / 2 এর চেয়ে বেশি নয়, সুতরাং আপনি এখনও সমস্ত কিছু খুঁজে পাবেন এটি করে অ-মৌলিক সংখ্যার জন্য কারণগুলি। (এছাড়াও আপনি যদি কেবল আধ্যাত্মিকতার জন্য পরীক্ষা করতে আগ্রহী হন তবে এটি স্কয়ারটি (এন) পর্যন্ত পুনরাবৃত্তি করা যথেষ্ট হবে, তবে বাশের যে কোনও উপায়ে
(number_under_test/2)+1
{}
সত্যিই পর প্রয়োজন হয় না then
দফা কারণ then
ইতিমধ্যে (সহ একটি গোষ্ঠীবদ্ধ অপারেটর হিসেবে কাজ করে elif
, else
অথবা fi
)। আসলে, কয়েকটি শেলের মধ্যে আপনি লিখতে পারেন, উদাহরণস্বরূপ, for i in 1 2 3; { echo $i; }
না do
বা না দিয়ে done
।
Largest Prime= 100
আমার কম্পিউটারে প্রিন্ট করে।