نمایش نتایج 1 تا 27 از 27

نام تاپیک: سوال در مورد الگوریتم اعداد اول؟

  1. #1

    سوال در مورد الگوریتم اعداد اول؟

    استاد ما ازمون خواسته یه برنامه بنویسید که عددی از کاربر گرفته و مشخص کند این عدد اول هست یا خیر....
    من به روش زیر برنامه رو نوشتم...البته در نظر داشته باشید که ما جلسه اولمون بود و چیز زیادی یادمون نداده ان...


    Private Sub cmdTest_Click()
    Dim x As Integer
    x = txtnum.Text

    If (x = 2) Or (x = 3) Then
    MsgBox "Yes...! this number is prime"
    Exit Sub
    End If

    If (x Mod 2) = 0 Or (x Mod 3) = 0 Then
    MsgBox "NO....! this number is not prime"
    Else
    MsgBox "Yes...! this number is prime"
    End If
    End Sub


    مطمپنم الگوریتم بهتری هم هست...اگه میتونید کمک کنید..ممنون میشم

  2. #2
    کاربر دائمی آواتار 3nitro
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    پست
    380
    این کدی که شما نوشتید فقط برای اعداد دو و سه و مضارب اونها چک میکنه . شما این رو باید درون یک حلقه قرار بدید که از 2 تا سر اون عدد ( نه خودش ) شروع کنه تقسیم کردن و باقیمونده صفر شد پس اول نیست در غیر این صورت اول است .

    Private Sub cmdTest_Click()
    Dim x As Integer
    Dim i As Integer
    Dim R As Integer
    x = txtnum.Text

    If (x = 2) Or (x = 3) Then
    MsgBox "Yes...! this number is prime"
    Exit Sub
    End If
    For i=2 to x-1
    R = x mod i
    If R = 0 Then
    MsgBox "NO....! this number is not prime"
    Exit Sub
    End If
    Next i
    MsgBox "Yes..!"
    End Sub

  3. #3
    درست میگید کد من برای اعدادی شبیه 77 ویا 55 درست کار نمیکنه...مممنونم

  4. #4
    می تونی اول برای 2 چک کنید.سپس عدد رو بر 2 تا نصف خودش تقسیم کنید.اگر بخش پذیر نبود اول است. (اگر تا نصف بخش پذیر نباشد بر بقیه هم بخش پذیر نیست)
    پیاده سازی این الگوریتم ممکنه راههای مختلفی داشته باشه .این یکی از اونهاست:
    #include<stdio.h>
    int n,k,i=2,flag=0;
    int main()
    {
    printf("Enter the number");
    scanf("%d",&n);
    if (n==2)
    printf("Prime");
    else
    {
    do
    {
    k=n%i;
    if (k==0)
    flag=1;
    i=i+1;
    }
    while (i<n/2 && flag==0);
    }
    if (flag==1)
    printf("Not prime");
    else
    printf("Prime");
    }
    بیا ای خسته خاطر دوست ! ای مانند من دلکنده و غمگین
    من اینجا بس دلم تنگ است
    بیا ره توشه برداریم
    قدم در راه بی فرجام بگذاریم


  5. #5
    کاربر دائمی آواتار 3nitro
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    پست
    380
    نقل قول نوشته شده توسط hosseinzadeh
    می تونی اول برای 2 چک کنید.سپس عدد رو بر 2 تا نصف خودش تقسیم کنید.اگر بخش پذیر نبود اول است. (اگر تا نصف بخش پذیر نباشد بر بقیه هم بخش پذیر نیست)
    پیاده سازی این الگوریتم ممکنه راههای مختلفی داشته باشه .این یکی از اونهاست:
    حتی میشه این رو به این صورت بیان کرد تا جذر اون عدد چک کنه ! :wink:

  6. #6
    من یک کم از تاریخ این تاپیک عقب هستم !
    ولی برای اینکه تعیین کنیم که عددی اول هست یا نه راه درست این است که آن عدد را بر اعداد اول تا جذر آن عدد تقسیم کنیم. منظورم این است که i=i+1 در برنامه دوستمون hosseinzadeh می تواند تبدیل به NextPrime شود.
    البته پیدا کردن عدد اول خودش یک مساله است. در واقع این روش برای یافتن تمام اعداد اول مثلا کوچکتر از 1000 خوب است.

  7. #7
    سلام
    همیشه لیست اعداد اولی که پیدا شده رو نگه دارید تا تقسیم پذیری اعداد جدید فقط بر اوونها آزمایش بشه.
    ضمنا لازم نیست همه اعداد رو تست کنید. طبق یک قضیه ریاضی کلیه اعداد اول به صورت 6k+-1 هستند. یعنی در بهترین حالت فقط یک سوم اعداد طبیعی میتونن اول باشند (البته در عمل خیلی کمتر از اینه)
    ممنون علی

  8. #8
    طبق یک قضیه ریاضی کلیه اعداد اول به صورت 6k+-1 هستند.
    خسته نباشید! شما فقط مضارب 2 و 3 رو حذف کردید

  9. #9
    کاربر دائمی آواتار 3nitro
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    پست
    380
    پیدا کردن عدد اول خودش یک مساله است
    کد کاملی در این زمینه در بخش ASP هست که آقای غیبی نوشتند . خیلی کامل هست و در بازه ای که مشخص می کنید بهتون اعداد اول رو نشون میده . میتونید اون رو هم نگاهی بندازید .

  10. #10
    نقل قول نوشته شده توسط Sepidar
    خسته نباشید! شما فقط مضارب 2 و 3 رو حذف کردید
    سلامت باشید :)

    بله ولی وقتی میگویند اعداد اول از یک تا فلان رو پیدا کنید معمولا خیلی ها اعداد فرد رو چک میکنند یعنی فقط یک دوم اعداد چک میشوند اما در صورتی که فقط اعداد بصورت 6k+-1 رو چک کنید یک سوم اعداد چک میشوند یعنی اگر مثلا تا ده میلیون جلو برید فرق این دو تا میشه ۶/۱ میلیون عدد یا افزایش ۱۶ درصدی در سرعت که اصلا چیز کمی نیست.
    تا جایی که بنده اطلاع دارم بیش از نمیشه اعداد رو فیلتر اولیه کرد چون فرمولی کلی تر از این برای اعداد اول وجود ندارد.
    پس چندان هم پیش پا افتاده نبود :)
    ممنون علی

  11. #11
    کاربر دائمی آواتار 3nitro
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    پست
    380
    کلیه اعداد اول به صورت 6k+-1 هستند.
    ببخشید k چه مجموعه ای هست ؟ تازه اینجوری حرف Sepidar درست تر هست .

  12. #12
    نقل قول نوشته شده توسط 3nitro
    ببخشید k چه مجموعه ای هست ؟ تازه اینجوری حرف Sepidar درست تر هست .
    سلام
    اینکه جزو بدیهیات است. کلیه اعداد اول به صورت 6k+-1 هستند. k که خب معلومه عدد طبیعیه دلخواه است. ضمنا اینجا بحث درستی و غلطی نیست. من روشی گفتم که در ادامه روشهای دوستان بود و سرعت برنامه رو افزایش میداد Optimization. این امر به صورت علمی تئوری و عملی قابل آزمایش است.
    ممنون علی

  13. #13
    VIP آواتار mnajafi
    تاریخ عضویت
    آبان 1383
    محل زندگی
    مشترک مورد نظر در دسترس نیست!!!!
    پست
    492
    دوستان تا اونجایی که من شنیدم هیچ فرمول خاصی برای اعداد اول پیدا نشده .یعنی با قطعیت نمی شه گفت که اعداد اول از قانون خاصی تبعیت می کنند.رجوع شود به مجلات ریاضی از دو سه ماه پیش به این ور که بزرگترین عدد اول با چند میلینو رقم رو پیدا کرده بودند.در هر حال برای اینکه سرعت محاسبه برنامه بالا بره اگر یک عدد رو از 2 تا جذر خودش تقسیم کنیم باقیمانده صفر بشه عدد اول نیست در غیر این صورت هست.

  14. #14
    بازم رسیدیم به همین بحث بزرگترین عدد اول! تورو خدا یکی لینک این مطلب رو به من بده!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!
    هر چی گشتم پیدا نکردم

  15. #15
    سلام
    در ریاضیات کلمه به کلمه تعاریف مهم هستند. من هم گفتم هر عدد اول به صورت 6k+-۱ است نه اینکه هر ۶k+-1 ای عدد اول است. اثباتش در تئوری اعداد خیلی هم ساده است.
    برای بالا بردن سرعت پیدا کردن اعداد اول روشهایی هست که در این تاپیک بعضی هاشون توضیح داده شد.
    ممنون علی

  16. #16
    آآآآآآآآآآآآِی! کمکککککککککککککک!
    بابا یکی لینک این قضیه آخرین عدد اول رو بگه! نگین هم بگرد که گشتم و نیافتم

  17. #17
    VIP آواتار mnajafi
    تاریخ عضویت
    آبان 1383
    محل زندگی
    مشترک مورد نظر در دسترس نیست!!!!
    پست
    492
    محمد نجفی
    اولین گام دانش و آگاهی جستجوی آن است.
    www.motafaker.com

  18. #18
    Private sub command1_click()
    Dim x As Long
    x = Text1
    Dim i As Long
    For i = 2 To x \ 2
    If x Mod i = 0 Then
    Print "not prime"
    Exit Sub
    End If
    Next i
    Print "prime"
    End Sub
    اینم یه نوع جواب هست

  19. #19
    VIP آواتار mnajafi
    تاریخ عضویت
    آبان 1383
    محل زندگی
    مشترک مورد نظر در دسترس نیست!!!!
    پست
    492
    شما در این مسئله تا n/2 رو چک می کنید .اگه یه عدد خیلی بزرگ باشه اونوقت کل زمان برنامه برای این کار تلف می شه.اگه شما یه عدد غیر از خودش ویک رو پیدا کنید که n بر اون بخش پذیر باشه شرط نقض می شه. برای این کار بهتره از 2 تا جذر عدد n رو چک کنیم.هم دامنه اعداد کوچکتره وهم جواب سریعتر پیدا میشه.

    if n=2 or 3 is prime
    for i=2 to sqr n
    if n mod i =0 is not prime
    else is prime
    محمد نجفی
    اولین گام دانش و آگاهی جستجوی آن است.
    www.motafaker.com

  20. #20

    الگوریتم

    1 - شروع
    2- a راازورودی بگیر
    3 - 1=i و k=0
    4 - a mod i=0 آنگاه k=k+1
    5 - i=i+1
    6 = اگرi<=a آنگاه چاپ کن عدد اول است درغیراینصورت چاپ کن اول نیست
    7 - پایان

  21. #21
    این روش هم بد نیست

    int isprime(int x)
    {
    int i;
    for(i=2;i<x/2;i++)
    if ((x%i)==0)
    return 0;
    return 1;
    }
    You never know what you can do until you try

  22. #22

    نقل قول: سوال در مورد الگوریتم اعداد اول؟

    نقل قول نوشته شده توسط mnajafi مشاهده تاپیک
    برای این کار بهتره از 2 تا جذر عدد n رو چک کنیم.
    لطف میکنید در این مورد توضیح بدید؟
    متوجه منظور شما نشدم.

  23. #23
    کاربر تازه وارد آواتار gelayor14
    تاریخ عضویت
    تیر 1389
    محل زندگی
    ایران زمین
    پست
    65

    Talking نقل قول: سوال در مورد الگوریتم اعداد اول؟

    با سلام
    به نظر شما این الگوریتم چی می شود؟
    الگوریتمی که عدد n را از ورودی دریافت کرده و و n امین عدد اول را شناسایی و چاپ کند

  24. #24
    کاربر دائمی آواتار returnx
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    ?
    پست
    1,190

    نقل قول: سوال در مورد الگوریتم اعداد اول؟

    الگوریتمی که عدد n را از ورودی دریافت کرده و و n امین عدد اول را شناسایی و چاپ کند
    سوال نا مفهوم !!!
    لطفا یکم بیشتر توضیح بدید...

  25. #25
    کاربر دائمی آواتار silverfox
    تاریخ عضویت
    دی 1386
    محل زندگی
    تهران
    سن
    32
    پست
    559

    نقل قول: سوال در مورد الگوریتم اعداد اول؟

    خوب به همون روش قبلی از 2 شروع می کنه اعداد رو چک می کنه تا به n امین برسه...

  26. #26
    کاربر تازه وارد آواتار gelayor14
    تاریخ عضویت
    تیر 1389
    محل زندگی
    ایران زمین
    پست
    65

    نقل قول: سوال در مورد الگوریتم اعداد اول؟

    نقل قول نوشته شده توسط ms2222 مشاهده تاپیک
    سوال نا مفهوم !!!
    لطفا یکم بیشتر توضیح بدید...
    فرض کنید عدد 10 از ورودی خوانده شده-10 امین عدد اول یعنی 29 را چاپ کند

  27. #27
    کاربر دائمی آواتار silverfox
    تاریخ عضویت
    دی 1386
    محل زندگی
    تهران
    سن
    32
    پست
    559

    نقل قول: سوال در مورد الگوریتم اعداد اول؟

    با یه while تا موقعی که به مثلا 10مین عدد اول نرسیده عدد ها رو به ترتیب(یا مضارب قبلی ها رو کنار می ذارین)چک می کنین که اول هست یا نه تا به جواب برسین

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •