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

نام تاپیک: اعداد اول

  1. #1

    اعداد اول

    درود
    میخواستم بدونم چه فرمولی باید برای اینکه اعداد اول یک عدد وارد شده رو حساب کرد میشه نوشت؟
    ممنون.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: اعداد اول

    عزيزم براي اين كار يك ميليون دلار جايزه گذاشتن كه رياضي دانها پيداش كنند اگر پيدا كردم به خاطر شيريني كار يك دلار از يك ميليون دلار رو بهت هديه ميكنم.
    ولي اگر كد براي اينكار بخواهيد چيزي نيست.

    int n=23;
    bool Find=false;
    for( int i=2; i<n/2 && !Find; i++ )
    if( n%i == 0 ) Find = true;
    if( Find )
    ShowMessage("add aval nist");
    else
    ShowMessage("add aval ast");

  3. #3

    نقل قول: اعداد اول

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

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    شهرمون
    پست
    171

    نقل قول: اعداد اول

    اگر منظورتون عامل های اوله عدده
    دوتا حلقه تو در تو بذارید که حلقه داخلی متغیرfactorرو مقدار اولیه 2 بدید بهش و هر چی عامل 2 داره میکشه بیرون و حلقه بزگ به factor یکی اضافه میکنه و تا زمانی که factor <n/2 باشه ادامه میده و وارد حلقه کوچکتر میشه
    آخرین ویرایش به وسیله بانوی ایران : جمعه 29 آبان 1388 در 14:23 عصر

  5. #5

    نقل قول: اعداد اول

    نقل قول نوشته شده توسط CppBuilder2006 مشاهده تاپیک
    لازم نیست تا 2/n همه بررسی بشن. برای سریع تر شدن کار میشه با تغییراتی فقط تا رادیکل n رو بررسی کرد.
    نقل قول نوشته شده توسط tdkhakpur مشاهده تاپیک
    for( int i=2; i<n/2 && !Find; i++ )
    اگه میخوای از این هم سریعتر بشه باید مقدار √n رو بیرون از حلقه چاپ کنی و داخل حلقه فقط اون عدد رو بذاری.وگرنه برای اعداد خیلی بزرگ باید سالها منتظر جواب بمونی.
    مام همین کار رو کردیم که تو acm ازمون ایراد گرفتن.

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: اعداد اول

    نقل قول نوشته شده توسط mortezamsp مشاهده تاپیک
    اگه میخوای از این هم سریعتر بشه باید مقدار √n رو بیرون از حلقه چاپ کنی و داخل حلقه فقط اون عدد رو بذاری.وگرنه برای اعداد خیلی بزرگ باید سالها منتظر جواب بمونی.
    مام همین کار رو کردیم که تو acm ازمون ایراد گرفتن.
    اين فقط مثال بود و الا هر چند سريعتر هم باشد فايده اي ندارد بالخره عدد n تا دنيا دنياست وجود دارد و هميشه احتياج به سرعت..!

  7. #7

    نقل قول: اعداد اول

    یک الگوریتم نسبتا بهینه : تمام اعداد اول بجز 2 ، فردند ! پس ما در حلقه لازم نیست

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

    بخشپذیر بشه ، اینطوری تقریبا نصفی از داده ها یا بیشتر ، از مقایسه حذف میشوند و

    الگوریتم بهینه تر میشود :


    bool is_prime(int n){
    bool res = true;
    if(n<=1)
    res = false;
    if(n==2)
    res = true;
    if(n%2==0 && n!=2)
    res = false;
    else{
    for(int i=3;i<=sqrt(n);i+=2){
    if(n%i==0){
    res = false;
    break;
    }
    }
    }
    return res;
    }






  8. #8

    نقل قول: اعداد اول

    من هم لینو واسه کوچکتر از 100 نوشتم که تا جذر حساب میکنه !!
    #include<iostream.h>
    #include<math.h>
    #include<conio.h>
    int main()
    {
    clrscr();

    int i=2,j=2,k=2,x;

    while (i<=100)
    {
    while (k<=sqrt(i))
    {
    if (i%k==0)
    j=j+1;
    k++;
    }
    if (j==2)
    cout<<i<<"\n\n";
    k=2;
    i++;
    j=2;
    }
    cin>>x;
    return 0;
    }

برچسب های این تاپیک

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

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