সিভ অফ এরাটস্থেনিজ (Sieve of Eratosthenes) প্রয়োগ করে প্রাইম নাম্বার বের করা

কোন একটা নাম্বার যদি প্রাইম না হয়অর্থাৎ কম্পোজিট(যৌগিক সংখ্যাহয় তাহলে সেই নাম্বারটার একটা ফ্যাক্টর (উৎপাদকনাম্বারটির বর্গমূলের সমান বা তার থেকে ছোট হবেই” একটা উদাহরন দিলে মনে হয় এই কথাটার মানে বোঝা সহজ হবে

ধরা যাক,আমাদের কাছে একটা কম্পোজিট নাম্বার আছে সেইটা হল ৯০ এখন একটা সিম্পল ক্যালকুলেটর দিয়ে আমরা √(৯০ ) এর মান বের করতে পারি আমার পিসির ক্যালকুলেটর বলতেছে যে, √(৯০ ) এর মান হচ্ছে৯.৪৮৬৮৩২৯৮০৫০৫১৩৮ আমরা যেহেতু কোডিং এর সময় ইনটিজার ভ্যালু নিয়া কাজ করব তাই আমরা বলতে পারি যে √(৯০ ) এর মান সিমপ্লি  আচ্ছা এই পর্যন্ত বোঝা গেল এখন আমরা একটা জিনিস দেখি-



*৯০=৯০
*৪৫=৯০
*৩০=৯০
*১৮=৯০
*১৫=৯০
*১০=৯০

আমরা শুধু ৯০ কে দুইটি সংখ্যার গুনফল আকারে লিখেছি এবং আসলে এইগুলাই হচ্ছে ৯০ এর সবগুলা ফ্যাক্টর এখানে একটু লক্ষ করলেই দেখা যায় যেবামপাশের কলামে যে ফ্যাক্টর গুলা আছে সেইগুলা √(৯০ ) এর সমান বা তার থেকে ছোট আর ডানপাশের কলামে যে ফ্যাক্টর গুলা আছে সেইগুলার মান √(৯০ ) এর সমান বা তার থেকে বড় আবার আমাদের ক্যালকুলেটর থেকে করা হিসাব অনুযায়ী আমরা জানি যে √(৯০ ) এর মান  তাহলে আমাদের থিওরি অনুযায়ী কি সব কিছ হচ্ছে?????? হা হচ্ছে কারন আমাদের থিওরি তে বলা আছে যেকম্পোজিট নাম্বারের একটা ফ্যাক্টর নাম্বারটির বর্গমূলের সমান বা তার থেকে ছোট হবে  

এইখানে ৯০ এর ফ্যাক্টর গুলা হইতেসে ,,,,,,১০,১৫,১৮,৩০,৪৫ এবং ৯০ তাইলে এইখানে ৫টা ফ্যাক্টর আছে যাদের মান √(৯০ ) থেকে ছোট আর √(৯০ ) এর মান হচ্ছে  তাই আমদেরথিওরিটা একদম পারফেক্ট ভাবে মিলে গেছে কারন ফ্যাক্টর গুলার মধ্যে   আছে এইখানে আর একটা মজার বিষয় লক্ষণীয় যে৯০*১৫(টেস্ট করার জন্য নিলাম আরকি এবং ১৫ এর মধ্যে একটা হচ্ছে √(৯০ ) এর মান থেকে ছোট(এইক্ষেত্রে এবং আরেকটা √(৯০ ) এর থেকে বড় (এইক্ষেত্রে ১৫) আবার ৯০=*১০ এর মধ্যে একটা হচ্ছে √(৯০ ) সমান(আরেকটা হচ্ছে √(৯০ ) থেকে বড়তো আমরা এইখান থেকে বলতে পারি যে৯০ এর
ফ্যাক্টর গুলার একটা যদি √(৯০ ) থেকে ছোট হয় তাহলে আরেকটা হবে √(৯০ )থেকে বড় যদি তা না হয় তাহলে তাদের গুনফল ৯০ হবে নাগুনফল গুলা খেয়াল করলেই দেখা যায়
তাহলে একটা নাম্বার n প্রাইম কিনা তা জানতে হলে √(n ) পর্যন্ত সংখ্যা দিয়ে ভাগ করলেই হয়ে যাবে n বা n-1 বা n/2 পর্যন্ত সংখ্যা দিয়ে ভাগ করার কোনই দরকার নাই কেন নিশ্চয়ই সবাই বুঝতে পারছে কারন নাম্বারটা যদি প্রাইম হয় তাহলে √n এই সীমার মধ্যে একটা নাম্বার দিয়েও n ভাগ যাবে না
এইবার আমরা code  চলে আসিঃ 




এইবার আসা যাক কোডটাকে ব্যাখ্যা করার পালাধরা যাক১৭ প্রাইম
কিনা আমরা চেক করতে চাইআমাদের এইখানে প্রথমেই আমরা একটা ভেরিয়েবল x  আমাদের যে নাম্বারটাকে প্রাইমকিনা চেক করতে  চাই,তার বর্গমূল x  এসাইন হবে এক্ষেত্রে হবে 
এরপরে for loop এর ভেতরে আমরা  পর্যন্ত লুপ চালাই লুপের ভিতেরে condition দেয়া আছে যেযদি আমাদের 17,i দ্বারা ভাগ যায় তাহলে লুপটা ব্রেক হুয়ে যাবে 2 দ্বারা ১৭ ভাগ যায় না তাই i=3 হবে দ্বারা ১৭ ভাগ যায় না তাই i=4 হবে  দ্বারা ১৭ ভাগ যায়না তাই i=5 হবে কিন্তু আমাদের x এর আছে  তাই প্রোগ্রাম control লুপ থেকে বের হয়ে যাবে এখন নিচে আরেকটা condition আছে   if(n>1 && i == x+1) এখানে n>1এইটা সত্য(n=17 তাইএবং i == x+1
এইটাও সত্য কারন i এর ভেলু যখন  হইসিল তখন লুপ থেকে আমরা বের হয়ে গেসিলাম আবার x এর মান হইতেসে  যার সাথে  যোগ করলে হয়  তাই= এইটা সত্যতাই আমাদের নাম্বারটা প্রাইমএইভাবে অন্যান্য নাম্বারগুলাও চেক করে দেখা যাবে প্রাইম কিনা