مقسوم علیه های اول یک عدد
با سلام این الگوریتم درست کار میکنه یا نه اگر میکنه نظرتون چیه و اگر مشکل داره مشکلش چیه ممنون
int n = 18;
if (2 < 3) {
Log.i("LOG", "maghsom alayh = " + 1);
Log.i("LOG", "maghsom alayh = " + n);
for (int i = 2; i < n; i++) {
if (n % i == 0) {
Log.i("LOG", "maghsom alayh = " + i);
if (i == 2) {
Log.w("LOG", "maghsom alayh aval = " + i);
} else if (i % 2 == 0) {
Log.e("LOG", "aval nist = " + i);
} else if (i == 3) {
Log.w("LOG", "maghsom alayh aval = " + i);
} else if (i == 5) {
Log.w("LOG", "maghsom alayh aval = " + i);
} else if (i == 7) {
Log.w("LOG", "maghsom alayh aval = " + i);
} else if (i == 9) {
Log.e("LOG", "aval nist = " + i);
}
}
}
}
سلام.ببینید ما تعداد محدودی عدد اول نداریم پس نمیتونیم اونهارو یکی یکی چک کنیم پس این راه حل کار ماست:
اول که عددو تعریف میکنیم و همچنین یک boolean.بعد میایم یه حقه ی for مینویسیم و توی اون روی یک متغیر که یکی یکی بهش تست میکنیم که آیا متغیر اصلی بر اون بخش پذیر هست یا نه و اگر بخشذیر بود روی این مقسو علیه همین کار هارا انجام میدهیم تا ببینی بغیر از خودش و یک مقسوم علیه دارد یا نه و اگر نداشت مقدر راboolean مساوی true قرار میدهیم و میگوییم اگر boolean مساوی true بود آن مقسوم علیه چاپ شود.امیدوارم منظورمو رسونده باشم:
int num = 100;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
boolean g = false;
for (int z = 2; z < i; z++)
if (i % z == 0) {
g = true;
}
if (g == false) {
Log.i("LOG", "number is: " + i);
}
}
}
در رابطه با الگوریتم نویسی اینجا پاسختون رو دادم .
ولی لازمه چند نکته رو در مورد الگوریتم نویسی اضافه کنم :
- هرچه الگوریتم کوتاه تر باشد ، بهتر است .
- هر چه الگوریتم ساده تر باشد بهتر است .
- هرچه الگوریتم داینامیک تر باشد بهتر است .
در رابطه با مورد 1 :
الگوریتمی که شما نوشتید شاید به نظر صحیح برسه ، اما مسیر الگوریتم شما طولانی شده .
طولانی شده بی جهت الگوریتم باعث مشکلات مختلفی از جمله کاهش سرعت اجرا ، کاهش انعطاف پذیری ، شلوغی کد میشود .
مورد دوم :
همونطور که در لینکی که قرار دادم اشاره کردم ، الگوریتم چیز عجیبی نیست و نباید باشه ، هر چقدر ساده تر نوشته بشه ، خواناییش بهتر ، کارایی بیشتر و توسعه آن راحت تر است .
همونطور که دوستمون هم اشاره کردن دستوری که نوشتی if 2 < 3 یک دستور اضافی هست که نوشتنش هیچ لزومی نداره چون همیشه عدد 2 از 3 کوچکتر هست و هرگز خلاف این قضیه صورت نمیگیرد .
مورد سوم :
منظور از داینامیک بودن الگوریتم ، انعطاف پذیری ساختار آن هست ، همونطور که دوستمون اشاره داشتند ما تعداد محدودی عدد اول نداریم (مطالعه شود) پس نوشتن دونه دونه اعداد کار صحیحی نیست باید طوری الگوریتم پیاده سازی شود که با کمترین مقدار دستورات بیشتری بازدهی را داشته باشد .
پیشنهاد من به شما این هست که این بخش از آموزش استاد رو با دقت بیشتری مطالعه کنید تا زمینه بهتری در الگوریتم نویسی و برنامه نویسی پیدا کنید .
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .