با چند مقدمه شروع میکنم بعد میریم سر اصل ماجرا
قبل از شروع بیایم مضارب عدد 12 و 5 رو بررسی کنیم
12 = 1 , 2 , 3 , 4 , 6 , 12
5 = 1 , 5
می تونیم به این نتیجه برسیم غیر از خود عدد و عدد یک اگر عددی وجود داشته باشه که به عدد ما بخش پذیر باشه پس عدد اول نیست
الگوریتم این کار به این صورت است که در ابتدا یک حلقه داشته باشیم و از عدد 2 تا عدد قبل از اون عدد مثلا اگر عدد مورد نظر 5 باشه تا عدد قبل اون میشه عدد 4 حلقه ما یک شرط خاصی رو بررسی کنه
خب اون شرط چیه؟اون شرط اینکه ما زمانی که عدد خودمون رو تقسیم بر اون عددی که از 2 تا 4 میشماریم باقی مانده آن صفر باشه که کد اون میشه
input % i == 0
پس یعنی ما در اون حالت یک عدد دیگه غیر از 1 و 5 پیدا کردیم پس کافیه بگیم نخیر عدد مورد نظر اول نیست
که اون رو به زبان برنامه نویسی بهش میگیم false
حالا همون عدد 5 رو فرض کنیم زمانی که هیچ عددی بعد از پایان حلقه پیدا نکردیم که اتفاق بالا براش بیوفته خب پس بعد حلقه میگیم اگه این اتفاق نیوفتاد پس اون عدد اوله پس در برنامه نویسی بهشم میگیم
true
همونطور که خود فایل گفته عدد 1 نه اول و نه مرکب پس در همین حالت ما قبل از وارد شدن به حلقه بررسی میکنیم اگه عدد اول باشه باید مقدار نادرست بودن رو بگه چون ما فقط دنبال اعداد اول هستیم.
#include <iostream>
using namespace std;
//بررسی اول بودن عدد ورودی با استفاده از
//true - false
bool checkPrime(int input) {
if (input == 1)
return false;
for (int i = 2; i < input; i++) {
if (input % i == 0) {
return false;
}
}
return true;
}
void main(){
//تابع اصلی اجرای برنامه باید حواسمان باشد که این تابع باید اخرین تابع باشد
}
for (int i = 100; i < 1000; i++) {
if (checkPrime(i)) {
// خب شرط درست بوده و این عدد الان اوله باید یسری کار دیگه روش انجام بدیم
}
}
به این صورت که خود خروجی تابع ما باعث میشه شرط ما در صورت درست بودن اجرا بشه
تو این کد ما اعداد اول رو پیدا می کنیم نه اعداد جان سخت مد نظر پروژه
می تونیم کارهای دیگه روش انجام بدیم
true --->
درست بودن
این کد در کل اعداد اول 100 ت 1000 رو پیدا می کنه
کافی است عدد را تقسیم بر 10 کنیم
num = num /10;
بحثش اینکه ما عددی به عنوان بهش میدیم تعداد رقم های اعدادی هست که ما بررسی می کنیم
منظورش این بوده که عدد ما چند رقمی باشه و گفته حتما باید از 1 تا 8 وارد بشه یعنی ما حداکثر میتونمی عدد 8 رقمی بدیم اگه بیشتر شد نباید برنامه ما اجرا بشه
خب می تونیم از این ایده بگیریم که عدد 10 رو به توان تعداد رقم ها برسونیم این مقدار عدد پایان رو به ما میده و یک بار دیگه ها عدد 10 رو به توان (1 - همون تعداد رقم ها )برسونیم که مقدار شروع بازه رو بهمون میده
for(int i = شروع ; i < پایان ;i++){
}
ما باید ابتدا بعد از بررسی شروط گفته شده مثل بازه 1 تا 8 رقمی بودن رو بررسی کنیم
سپس حلقه رو با توجه به مقدمه بالایی مربوط به ورودی یک حلقه ایجاد کنیم
بعدش از روی عدد i یک عدد جدید تعریف کنیم به اسم num مثلا بعدش
داخل حلقه یک حلقه دیگه داشته باشیم مثلا
while(checkPrime(num))
خب تا اینجا تا زمانی ما هر بلایی سر عدد میاریم هر بار بررسی میشه که اوله یا نه و کار ما اینکه داخل بدنه حلقه دوم هر بار عدد رو یک رقم از سمت راست کم کنیم و یک شرط قبل از حذف رقم هم داشته باشیم که عدد یک رقمی بود مثلا از عدد 10 کمتر بود ، پس عدد جان سخت است
حواستون باشه عدد
i
رو اینجا چاپ می کنیم نه عدد یک رقمی باقی مانده رو
و همیچنین بعد از چاپ باید از حلقه دوم خارج بشیم خب چطوری
break;
موفق باشید