آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مقسوم علیه های اول یک عدد

mansoorheydari  10 سال پیش  7 سال پیش
+6 0

با سلام 

من برای سوال درج مقسوم علیه های اول یک عدد کد زیر را نوشتم و منظورمم اینه که با توجه به اینکه عدد اول فقط بر خودش و یک قابل تقسیمه پس ما یک متغیر در نطر میگیریم و هر بار که تقسیم شد یکی به اون متغیره اضافه میکنم اگر تعدادش برابر 2 شد پس اون عدد اوله اما اگر بیشتر شد نیست  ، ولی هر کار میکنم نمیتونم کدش رو بنویسم ، کسی میتونه راهنمایی کنه من کدی که خودم رو نوشتم میزارم ببینید کجاش رو اشتباه میرم 

    int number = 20;
        for (int i = 1; i <= number; i++) {

            if (number % i == 0) {
                for (int j = 1; j <= i; j++) {
                    int k = 0;
                    if (i % j == 0) {
                        k++;
                        if (k == 2) {
                            Log.i("LOG", "n" + j);
                        }
                        
                    }
                
                }

            }

        }
0 0
سلام ، تو یه جمله بگو میخوای چیکار کنی؟ (10 سال پیش)
+1 0
میخوام از بین مقسوم علیه ها اونایی که عدد اول هستن فقط چاپ بشن (10 سال پیش)
0 0
کمی ریاضی : اگر اعداد اول را با p نشان دهیم آنگاه p = 6k+1 یا p = 6k-1 که K اعداد ظبیعی هستند(به غیر از 2 و 3) مثال : 5 = 1-6 یا 17 = 1-6(3) با این الگو می تونید به راحتی اعداد اول مثلا بین 1000000 تا 10000000000000000000 رو با فقط یک تقسیم ساده به دست بیارید اما با الگوریتم هایی که در پایین نوشتن (یعنی تقسیم دونه دونه اعداد به دونه به دونه اعداد قبل خودش) اگه اعداد بزرگ یا زیاد باشن ممکنه طول بکشه یا حتی برنامه بسته بشه امیدوارم کمک کرده باشم. (8 سال پیش)
0 0
البته در اعداد اول خاصیتی داریم که لازم نیست همه اعداد تا خود اون عدد رو بررسی کنید(که آیا بخش پذیره یا نه) فقط کافیه از 2 تا رادیکاله اون عدد رو بررسی کنید (7 سال پیش)
 برای این سوال 19 پاسخ وجود دارد.
پاسخ به سوال 
CreativeBoy  10 سال پیش
+7 0

سلام 

اول از همه یه راهنمایی: وقتی کد مینویسید باید خیلی ریلکس باشید :) نمیخواد اینقدر مسئله رو بپیچونی، اول از همه ساده ترین راهی که به ذهنتون میخوره رو بنویسید، بعدا میشه شاخ و برگ بهش داد، مثلا:

int num = 11;
for (int i = 2; i <= num / 2; i++)
{
      if (num % i == 0) {
          Log.i("LOG", "adad aval nist");
          return;
      }
}
Log.i("LOG", "OK"); 

خوب حالا اینجا چکار کردیم:

1: توی حلقه اومدم num / 2  کردم - این کار به این خاطره که هیچ عددی بر اعداد بزرگتر از نصف خودش بخشپذیر نیست :) (امیدوارم منظورمو رسونده باشم :)) ) پس دیگه نیازی نیست اعداد بزرگتر از num / 2 چک بشه که این باعث میشه سرعت برنامه بیشتر بشه.

2: توی ()if گفتیم که آقا اگه توی این مسیر ( از 2 تا  num / 2) به عددی رسیدی که num  بر اون عدد بخشپذیر بود یه پیغام چاپ کن و return کن( از برنامه کلا بیا بیرون و الکی تقسیم نکن، که این هم توی سرعت بازم تاثیر داره و برنامه دیگه الکی سرچ نمیکنه. ) 

3: حالا چرا گفتیم از 2 شروع به سرچ کردن کن - به خاطر این که همه اعداد بر 1 بخشپذیر هستن، چرا الکی اینو چک کنه ؟ :))

4: آخر کار هم بعد از این که حلقه for کارشو انجام داد اومدیم یه پیغام چاپ کردیم که آره، عدد اوله :)) به همین سادگی، به همین خوشمزگی

0 0
ممنون از راهنمایی ، اما چطوری برای یک رشته عدد که در سوال مقسوم علیه های یک عدد هستند ، اعداد اولش رو چاپ میکنیم ؟ (10 سال پیش)
+1 0
وای ببخشید، حواسم نبود :( همیشه صورت سوالو ناقص میبینم :) (10 سال پیش)
پاسخ به سوال 
Spirit  10 سال پیش
+6 0

چاپ مقسوم علیه هایی که عدد اول هستند (خیلی سخته ها ، از ویکیپدیا هم کمک گرفتم):

int number = 284565;
for (int i = 1; i <= number/2; i++) {
if (number % i == 0) {
System.out.println(i);
number /= i;
}
}
+1 0
روش خیلی باحالیه، تو این جور مسائل اگه ریاضی خوب بلد باشیم خیلی کمک میکنه. (10 سال پیش)
0 0
ممنون ، ولی این روش برای من مبتدی یکم که چه عرض کنم یکم از یکم بیشتر گیج کننده بود ، ولی خیلی خیلی ممنون (10 سال پیش)
+1 0
کاش کمی توضیح میدادید اینجا چی شد؟ (10 سال پیش)
0 0
یک بار دیگه اگر الگوریتم برنامه رو بازبینی کنید بهتره. برای مثال اگر عدد 744 رو داشته باشیم، مقسوم علیه های اولش 2، 3 و 31 هستند. در صورتی که جواب برنامه 1، 2، 3 و 4 هست. جالب ترین قسمت عدد 4 هست!!! در ضمن عدد 1، جزو اعداد اول نیست. لطفا جواب بنده رو در پایین، یک نگاه بندازید. (9 سال پیش)
پاسخ به سوال 
m_sh_m  10 سال پیش
+6 0

سلام

الگوریتمی که براتون گذاشتم دقیقا همون کاری که میخوای رو انجام میده

الگوریتم شما تقریبا درست بود اما سه جاش ایراد جزیی داشت اما من الگوریتم شما رو تصحیح کردم و بهتون میگم اشتباه شما کجا بود

خب اول الگوریتم درست رو مینویسم

 
  int number = 26;
    for (int i = 1; i <= number; i++)
      {   
if (number % i == 0) { int k = 0; for (int j = 1; j <= i; j++) { if (i % j == 0) { k++; } } if (k == 2) { Log.i("LOG", ""+i);
{
}
}

اولین اشتباه:متغیر kرا باید بیرون for تعریف میکردید

دومین:دستور مقایسه ای k==2 را باید بیرون for تعریف میکردید

سومین:باید به جای log کردن j باید i را log میکردید

0 0
خیلی خیلی ممنون ، باور کنید من حدود یک روز در موردش فکر کردم ولی خوب به جایی نرسیدم الان که شما اشتباهات من رو گفتین ؛ می گم چرا ؟!!! چرا ؟!! نمیدونم ولی بعضی وقتا می گم شاید من دیگه بدرد این کارها نمی خورم :( (10 سال پیش)
0 0
خواهش میکنم دوست عزیز برنامه نویسی سخت ترین شغل در دنیا هست...من خودم با هزار سختی تونستم برنامه نویسی رو اون هم در حد معمولی.. اصلا قبول ندارم این حرف شمارو که میگید به درد برنامه نویسی نمیخورید...برنامه شما 60 درصد کار رو میکرد و شیوه الگوریتم نویسیت قشنگ بود...همین که یک روز فکر کردید خودش جای تحسین داره...تبریک میگم که سر سختانه برای حل مشکلاتت میجنگی موفق باشید (10 سال پیش)
0 0
ممنون از دلگرمیت دوست عزیز ، چشم انشالله همچنان ادامه میدم (10 سال پیش)
0 0
خواهش میکنم...امید وارم همچنان به سمت جلو پیش بری (10 سال پیش)
+9 0
يه روز يه دانشمند روي يك ماهي آزمايشي ترتيب ميده. در وسط آكواريوم ماهي يك شيشه قرار ميده و يك طرف ماهي رو قرار ميده و يك طرف هم غذاي ماهي رو. به ماهي هيچ غذايي نميده. بمرور كه ماهي گرسته ميشه به سمت غذا حمله ور ميشه ولي شيشه مانعش ميشه كه به غذا برسه. خوب ماهي دليل اينكه به غذا نميرسه رو نميدونه. ولي بهرحال با تمام قوا شروع به سعي و تلاش ميكنه كه به غذا برسه و خوب نمي رسه. بعد از مدتي سعي و تلاش جدي و بي امان كم كم ماهي نااميد ميشه و ديگه دست از سعي و تلاش برميداره. دانشمند كه منتظر نااميد شدن كامل ماهي بود صبر ميكنه تا از نااميدي ماهي مطمئن بشه بعد شيشه وسط رو برميداره و منتظر ميشه ببينه ماهي به سمت غذا ميره. ولي هيچ وقت ديگه ماهي به سمت غذا نميره و از گرسنگي مي ميره. لحظه نااميدي كامل تازه لحظه دستيابي به موفقيت هست. تا زماني كه امكان سعي و تلاش داري دست از سعي و تلاش برندار و اينقدر به سعي و تلاشت ادامه بده كه دانشمندي كه داره تو رو آزمايش ميكنه رو نااميد كني. اون وقته كه غذا در دسترست خواهد بود. (9 سال پیش)
0 0
(9 سال پیش)
0 0
کسی میتونه بگه اون k==2 برا چیه متوجه نمیشم.متاسفانه. (8 سال پیش)
0 0
(8 سال پیش)
0 0
(8 سال پیش)
0 0
(8 سال پیش)
پاسخ به سوال 
JSONObject  10 سال پیش
+2 0

من این سوال رو قبلا از استاد کرده بودم خواستی یه نگا بنداز

نمایش مقسوم علیه های اول در الگوریتم های جاوا

پاسخ به سوال 
konect  10 سال پیش
+1 0

چون ما میدونیم عدد یک اول نیست پس بهتره که از دو شروع بشه مثل زیر

for(int i =2; i < = number; i+ ){
0 0
و البته بهتره تقسیم ها تا number/2 ادامه پیدا کنه چون مقسوم علیه های هر عدد فقط از یک تا number/2 میتونه موجود باشه (10 سال پیش)
0 0
به این شرط که خود عدد رو هم در نهایت چه کنیم ببینیم اول هست یا نه (10 سال پیش)
پاسخ به سوال 
uncocoder  10 سال پیش
+27 0

نا امید نشو دوست عزیز.

فرق کسانی که نا امید میشن با کسانی که نمی شن در این هست که دسته اول پشت چاله های کوچکتر می مونن و دسته دوم پشت چاله های بزرگ تر می مونن.

در هر حال همه پشت چاله ها معطلیم.

پاسخ به سوال 
Criss  10 سال پیش
+2 0

سلام دوستان من هم خیلی به این الگوریتم فکر کردم و دوست داشتم که حتما اون رو انجام بدم

باید بگم من هم دقیقا فکری رو داشتم که شما داشتید یعنی خروجی های مربوط به مقسوم علیه باید 2 تا باشه پس اون عدد یک عدد اول میشه

دیروز راجب or . and سوال کردم میخواستم برای این الگوریتم استفاده کنم که نشد و در اخر من همین الان الگوریتمش رو تموم کردم <

که به این صورت هست :D خیلی پیچیده شده : D

//یک عدد برای تست انتخاب میکنیم
 int tnum = 21;
// پیدا کردن تمام مقسوم علیه ها برای عددی که انتخاب کردیم
for (int tm = 1; tm <= tnum; tm++) {
if (tnum % tm == 0) {
// متغییری که چک میکنه تعداد مقسوم علیه ها 2 تا باشه باید بیرون از حلقه تعریف بشه
int chek = 0;
// نک نک مقسوم علیه های بدست اومده از عددی که انتخاب کریدم دوباره مقسوم گیری میکنیم
for (int tm2 = 1; tm2 <= tm; tm2++) {
if (tm % tm2 == 0) {
// به تعداد مقسوم علیه ها متغیر افزایش پیدا میکنه
chek++;
}
}
// اگر از 2 بیشتر بشه اون عدد اول نیست
if (chek > 2) {}
else {
// پس اعداد اول رو در مقسوم علیه ها به ترتیب زیر تشخیص داده میشه
Log.i("ONE LOG", "all ONE maghsoom for " + tnum + " is : " + tm);
}
}
}

//----------------سورس رو جدا میکنم که به چشم بیاد

 int tnum = 21;
for (int tm = 1; tm <= tnum; tm++) {
if (tnum % tm == 0) {
int chek = 0;
for (int tm2 = 1; tm2 <= tm; tm2++) {
if (tm % tm2 == 0) {
chek++;
}
}
if (chek > 2) {}
else {
Log.i("ONE LOG", "all ONE maghsoom for " + tnum + " is : " + tm);
}
}
}
پاسخ به سوال 
Criss  10 سال پیش
+1 0

کاشک مدیران انجمن یک بخش جداگانه برای تمرینات رو میگذاشتند که اگر روش های متفاوتی وجود داشته باشه دوستان اونجا کد هارو بزارند

توی قسمت 02-05 و اموزش متد هابرای متدی که الگوریتم فاکتوریل تعریف میشه

من سعی کردم قضیه رو به روش برعکسش حل کنم که اولش به مشکل برخوردم

یعنی 8! رو از 1 تا 8 ضرب کنیم و نه از 8 تا 1

که کدش به اینصورت میشه - خودم فکر میکنم جالب نشده ( بقول استاد اصلا قشنگ نیست از این روش استفاده بشه :D ) دوستان اگر روش جالبتری رو میشناسید معرفی کنید

int factor = mfactor(5);
        Log.i("Mfactor LOG", "" + factor);
}
// بلاک مربوط به public viote on create رو رعایت کنید public int mfactor(int aa) { int fac = 1; for (int i = 1; i < (aa + 1); i++) { fac = fac * i; } return fac;

 

پاسخ به سوال 
JSONObject  10 سال پیش
+2 0

در جواب  Criss : 

مگه بازگشتی چشه ؟

 public int fact(int x){
return ((x==1) || (x==0)) ? 1 : x*fact(x-1);
}
پاسخ به سوال 
MAHSA  9 سال پیش
0 0

 من این سورس رو برای مقسوم علیه عدد اول نوشتم 
ولی کل مقسوم علیه هارو تو خروجی میده و مشخص میکنه کدوم اوله و کدوم نیست.میشه راهنمایی کنید کاملش کنم؟           int num = 100;         for (int j = 2; j <= num; j++) {             if (num % j == 0) {                   if (j == 2) {                     Log.i("LOG", " " + j + " is avval");                 }                 else if (j == 3) {                     Log.i("LOG", " " + j + " is avval");                 }                   else if (j % 2 == 0) {                     Log.i("LOG", j + "is not avval");                     // break;                 }                 else if (j % 3 == 0) {                     Log.i("LOG", j + "is not avval");                     // break;                 }                 else if (j % 5 == 0) {                     Log.i("LOG", j + "is not avval");                     // break;                 }               }           }     } }
پاسخ به سوال 
MAHSA  9 سال پیش
0 0

کسی نمیتونه الگوریتم منو تکمیل کنه؟
دوستان لطفا راهنمایی کنید

پاسخ به سوال 
ATRAS  9 سال پیش
+2 0

این سورس کد کارتونو راه میندازه؟

  int number = 255;
for (int i = 2; i <= number; i++) {

// آیا متغیر نامبر به آی بخش پذیر است
if (number % i == 0) {
// بله پس آی یک مقسوم علیه نامبر است

// فرض کنیم آی اول است
boolean z = true;

// ببینیم آیا مثال نقضی پیدا می شود
for (int j = 2; j < i; j++) {
if (i % j == 0) {
// عددی کوچکتر از آی پیدا شد که آی به آن بخش پذیر باشد پس آی اول نیست
z = false;

// دیگر ادامه دادن فایده ندارد
break;
}
}

// آیا به این نتیجه رسیدیم که آی اول است
if (z) {
// بله، بود پس چاپش می کنیم
Log.i("LOG", "aval= " + i);
}
}
}
پاسخ به سوال 
othman  9 سال پیش
+1 0

پس continue کجاست ؟!

پاسخ به سوال 
A.A  9 سال پیش
0 0

به نظر من این الگوریتم خیلی سادست,امیدوارم به دردتون بخوره

 

        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);
                }
            }
        }

0 0
بقیه چجوری الگوریتم میفرستن؟پس چرا الگوریتم من اینجوری اومد رو صفحه؟؟؟:( (9 سال پیش)
پاسخ به سوال 
A.A  9 سال پیش
0 0

اگه میخواید بخونید کدو کپی کنید تو اکلیپس:)

0 0
ببخشید,حواسم نبود تو نظرات بنویسم (9 سال پیش)
0 0
هنگام ارسال پاسخ به شکل کد ،از آیکونی به شکل ( Source Code ) استفاده کنید . (9 سال پیش)
پاسخ به سوال 
Ali  9 سال پیش
+1 0

سلام

فکر کنم بهترین جواب رو پیدا کردم. البته با کمک از کد جناب نصرتی لطفا نظر بدید. 

long number = 744;
bool isRepetitive;

for (int i = 2; i <= number; i++) {
     isRepetitive = false;
     while (number % i == 0) {
           if(!isRepetitive){
              Log.i("LOG", i + "");
              isRepetitive = true;
          }
          number /= i;
     }
}
0 0
آفرین ، فکر کنم کوتاهترین الگوریتم باشه و درست کار میکنه . (9 سال پیش)
پاسخ به سوال 
Aramis  8 سال پیش
0 0

 

این برنامه فک کنم چیزی که میخواینو انجام میده :

int adad = 10;
        int shomar;
        for (int i = 2; i < adad; i++) {
            shomar = 0;
            for (int j = 1; j < adad; j++) {
                if (i % j == 0) {
                    shomar++;
                    if (shomar < 3 && j == i) {
                        if (adad % j == 0) {
                            Log.i("LOG", "Adad Aval= " + j);
                        }
                    }
                }
            }
        }
پاسخ به سوال 
sahand77  8 سال پیش
0 0

کمی ریاضی : اگر اعداد اول را با p نشان دهیم آنگاه p = 6k+1 یا p = 6k-1 که  K اعداد ظبیعی هستند(به غیر از 2 و 3) 

مثال : 5 = 1-6 یا 17 = 1-6(3) 

با این الگو می تونید به راحتی اعداد اول مثلا بین 1000000 تا 10000000000000000000 رو با فقط یک تقسیم ساده به دست بیارید اما با الگوریتم هایی که در پایین نوشتن (یعنی تقسیم دونه دونه اعداد به دونه به دونه اعداد قبل خودش) اگه اعداد بزرگ یا زیاد باشن ممکنه طول بکشه یا حتی برنامه بسته بشه 

امیدوارم کمک کرده باشم.

پاسخ به سوال 
Muta  7 سال پیش
0 0

این کد نمیدونم درست یا نه اما خیلی راحت قابل فهم و کار میکنه دوستان نظر بدن

فقط نمیدونم چرا else if رو به else خالی تبدیل کنیم به هم میریزه فرقشون چیه

  int z = 6;
for (int indexz = 1; indexz <= z; indexz++) {
if (z % indexz == 0) {
if (indexz == 2) {
Log.i("LOG", " number is : " + 2);
}
else if (indexz % 2 == 0) {
continue;
}

else {
Log.i("LOG", "number is : " + indexz);
}
}
}
0 0
با افزودن else if ما به کدهامون ، یک قید دیگر اضاف میکنیم . در صورتی که نیاز به هیچ قید دیگری وجود نداشته باشد ، با دستور else به کار خود پایان میدهیم . (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .