منتدى المنصورة برج بوعريريج التعليمية

هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.
منتدى المنصورة برج بوعريريج التعليمية

منتدى اسلامي تعليمي

AWSurveys

المواضيع الأخيرة

» شركة تركيب وصيانة مكيفات مركزية بالرس
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالأحد مايو 05, 2024 7:07 pm من طرف سها مجدى

» غسيل مكيفات سبليت بالرياض
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالأربعاء أبريل 17, 2024 5:59 pm من طرف سها مجدى

» شركة تشطيب فلل بالباحة
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالثلاثاء أبريل 09, 2024 6:36 pm من طرف سها مجدى

» شركة مقاولات بالمبرز
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالأربعاء أبريل 03, 2024 4:53 pm من طرف سها مجدى

» شركة نقل عفش بالرياض الياسمين
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالجمعة مارس 22, 2024 7:02 pm من طرف سها مجدى

» مقاول اسفلت بالرياض
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالخميس مارس 14, 2024 12:12 am من طرف سها مجدى

» شركة تركيب المصاعد بعسير
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالجمعة مارس 08, 2024 8:34 pm من طرف سها مجدى

» مبلطين ممتازين بالرياض
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالثلاثاء مارس 05, 2024 10:49 pm من طرف سها مجدى

» شركة مقاولات بخميس مشيط
  	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Emptyالسبت مارس 02, 2024 11:03 pm من طرف سها مجدى

التبادل الاعلاني

احداث منتدى مجاني

أفضل 10 أعضاء في هذا المنتدى


    ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java

    avatar
    Admin
    Admin


    رقم العضوية : 1
    عدد المساهمات : 1077
    دينار : 3245
    السٌّمعَة : 0
    تاريخ التسجيل : 12/03/2010
    العمر : 33
    الموقع : www.mansourahsidhoum.yoo7.com

      	 ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java	 	 Empty ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java

    مُساهمة  Admin الأربعاء سبتمبر 13, 2023 1:59 pm


    البرمجة البرمجة جهز الموضوع للطباعة
    طباعة الصفحة:

    1 من 2
    إذهب الى منتدى:

    -- إختار منتدى من القائمة --
    ~|| الأعداد الأولية رياضياً و برمجياً ||~ Prime Numbers || VB.Net , C# , C++ , Java
    الصفحة التالية الصفحة الأخيرة عرض جميع المشاركات بالكامل تصغير عرض جميع المشاركات
    The Black Matrix
    00:09 - 2012/01/28 معلومات عن العضو Tweet
    بسم الله الرحمن الرحيم

    الحمد لله على ما أعطانا و نشكره على نعمه التي لا تعد و لاتحصى

    وندعوه تقبل طاعاتنا و أعمالنا و يرضى عنا بالدنيا و الآخرة

    ربنا صلِ على سيدنا محمد - صلى الله عليه وسلم - و على آل سيدنا محمد

    و على أصحاب سيدنا محمد و على كل من سار على نهج الإسلام و اهتدى بهدي

    الإسلام ، وأدعوك يا الله أن تفرج عن اخواننا في فلسطين

    و العراق و السودان و الصومال و عن كل بلاد المسلمين، و اهد كل من ضل عن

    سواء السبيل.

    اللهم آمين







    أولاً: التعريف بالأعداد الأولية


    *** الأعداد الأولية (Prime Numbers): هي أعداد طبيعية – و هي الأعداد الصحيحة و الموجبة

    مثل 1،2،3،... – و أكبر من واحد و ذلك يعني أن الواحد لا تدخل ضمن هذا المجال ،

    و تتميز هذه الأعداد بأن قواسمها (Factors) محصوران في رقمين لا ثالث لهما و هما بالتحديد

    العدد نفسه و الرقم واحد أي أن هذه الأرقام تقبل القسمة على نفسها و الرقم واحد بدون باقي.



    ** و أول عدد أولي هو الرقم إثنان (2) و من الملاحظ أنه لا يقبل القسمة إلا على الرقم نفسه

    و هو 2 و الرقم 1 بدون باقي.



    ** الرقم واحد لا يدخل ضمن هذه الفئة **



    ** هناك أعداد كثيرة أولية لا حصر لها مثل:

    2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61.





    ثانياً: التفكير برمجياً لإيجاد الأعداد الأولية.
    ** حسناً لنفكر قليلاً بما أن الأعداد الأولية لا تقبل القسمة إلا على نفسها و الواحد

    بدون باقي فإن جميع الأعداد التي ضمن الفترة من الواحد إلى الرقم نفسه إذا قسمناها

    على الرقم الذي نريد التحقق منه ستعطي باقي أي عدد أكبر من واحد للتوضيح

    لاحظ الشكل التالي الذي يوضح العدد 7 كعدد أولي.



    ** r ترمز إلى الباقي (Remainder).



    حسناً، كما نلاحظ العدد سبعة قبِل القسمة على 7 و 1 بدون باقي فقط

    حسنا ، العدد 4 عدد غير أولي لذلك



    2



    نلاحظ من الشكل السابق أن العدد 4 قبل القسمة على 4 و 2 و 1 بدون باقي

    و ذلك يعني أنه عدد غير أولي.

    و ذلك يعطينا فكرة معينة لتطبيقها بالبرمجة

    أن نقوم بالتحقق من جميع الأرقام الواقعة بين 1 و العدد نفسه في ما إذا كان

    واحد منهم على الأقل يقبل القيمة بدون باقي و الكود سيكون بالشكل التالي:

    الشرح سيكون بالفيجوال بيسك .نت و بالنهاية سأضع الكود الآخير بعدة لغات.



    VB.Net
    Functio n isPrime(ByVal Num As Double) As Boolean

    Dim A As Integer

    For i = 2 To Num

    A = Num Mod i

    If A = 0 Then

    Return False

    End If

    Return True

    Next

    End Functio n



    في الحقيقة الكود السابق هو كود سيكتبه أي شخص سيبدأ للتفكير بالحل

    و لكن تعالوا لنفكر بمنطق رياضي قليلاً

    إذا وضعت واحد الحلقة لن تعمل و بالتالي الناتج True و هذا أول خطأ

    ثانياً لماذا لا أتأكد من قابلية القسمة العدد على 2 و 3 و5 و من

    ثم أبدأ الحلقة و السبب أن الكثير من الأرقام تقبل القسمة عليها و خاصة العدد 2 ،

    و أيضاً لماذا أقوم بالتحقق من قابلية القسمة العدد المطلوب التحقق منه

    وهو هنا (Num) على الأعداد الزوجية فأنا لا أريد أن يتحقق

    منها لأنني تأكدت بنفسي من خلال تجربة قسمته على 2 و للتوضيح

    مثلا العدد 18 يقبل القسمة على 2 لذلك ليس علي التحقق من الرقم 6 لأنه

    عبارة عن ضرب 2 في 3!!!!

    و الكود الناتج سيكون كالتالي



    VB.Net
    Functio n primo(ByVal Num As Double) As Boolean

    Dim A As Double

    If Num = 1 Then Return False

    If (Num = 2) Or (Num = 3) Or (Num = 5) Then Return True

    If Num Mod 2 = 0 Or Num Mod 3 = 0 Or Num Mod 5 = 0 Then

    Return False

    Else

    For i = 3 To Num Step 2

    A = Num Mod i

    If A = 0 Then

    Return False

    End If

    Next

    End If

    Return True

    End Functio n





    الكود السابق فعّال جدا و سريع للأعداد الضخمة جداً

    و من الملاحظ أنني تأكدت من الأعداد 2 و 3و 5 بالأول و هذا للسرعة فقط و ظهور بعض الأخطاء بدونهم.



    حسناً، هناك شيء أخير و هو أنني يمكنني أن أصغر عدد الأرقام التي سأتحقق منها و ذلك من خلال ما يلي

    لماذا تكون الحلقة من 2 إلى العدد نفسه ؟



    بصراحة السؤال غريب قليلاً، لنفكر مرة أخرى قليلاً



    يمكننا التحقق من 2 إلى الرقم الصحيح للجذر التربيعي للعدد فقط ؟؟؟؟؟؟

    حسنا لنفكر قليلا و نجرب على العدد 64

    64 = 8 * 8

    و أنا أقول أن نتأكد من 2 إلى 8 فقط

    و السبب أنه لو أردنا أن نضع رقم أكبر من 8

    64 = 16 * 4

    سنلاحظ وجود رقم آخر و هو الأربعة لذلك إذا كان الأربعة يقبل القسمة

    بدون باقي فإن 16 سيقبل بدون باقي لذلك اختصرت طريق طويلة جداً

    و الكود الجديد سيكون كالتالي


    VB.Net

    Functio n primo(ByVal Num As Double) As Boolean

    Dim A As Double

    If Num = 1 Then Return False

    If (Num = 2) Or (Num = 3) Or (Num = 5) Then Return True

    If Num Mod 2 = 0 Or Num Mod 3 = 0 Or Num Mod 5 = 0 Then

    Return False

    Else

    For i = 3 To Int(Math.Sqrt(Num)) Step 2

    A = Num Mod i

    If A = 0 Then

    Return False

    End If

    Next

    End If

    Return True

    End Functio n




    هذا الكود فعّال و سريع و مرعب لأنه سيتأكد من أي رقم بسرعة



    **** ملاحظة أخيرة العدد السالب ليس عدد أولي لذلك في أي برنامج قم

    بالتأكد من العدد ليس سالب و أيضاً ليس صفر لأنه لا يدخل ضمن هذه الأعداد .!!!

    و هناك ملاحظة صغيرة: أنه ليس علي المرور بالأعداد الزوجية لذلك سأبدأ

    بالعدد 3 و أقفز مرتين Step 2،

    ، و هذا يجعل الكود أسرع بالإضافة أن الكود النهائي

    غيرت نوع المتغيرات إلى Int64 لأنها تستوعب أرقام أكبر من Integer العادية.



    ثالثاً: البرنامج النهائي بعدة لغات
    VB.Net
    Functio n primo(ByVal Num As Int64) As Boolean

    Dim A As Int64

    If Num = 1 Then Return False

    If (Num = 2) Or (Num = 3) Or (Num = 5) Then Return True

    If Num Mod 2 = 0 Or Num Mod 3 = 0 Or Num Mod 5 = 0 Then

    Return False

    Else

    For i = 3 To Convert.ToInt64(Math.Sqrt(Num)) Step 2

    A = Num Mod i

    If A = 0 Then

    Return False

    End If

    Next

    End If

    Return True

    End Functio n


    و

    C#
    public static bool primo(Int64 Num)

    {

    Int64 A = 0;

    if (Num == 1)

    return false;

    if ((Num == 2) | (Num == 3) | (Num == 5))

    return true;

    if (Num % 2 == 0 | Num % 3 == 0 | Num % 5 == 0) {

    return false;

    } else {

    for (int i = 3; i <= Convert.ToInt64(Math.Sqrt(Num)); i += 2) {

    A = Num % i;

    if (A == 0) {

    return false;

    }

    }

    }

    return true;

    }

    و



    C++
    #include <math.h>



    bool primo(long long Num)

    {

    long A = 0;

    if (Num == 1)

    return false;

    if ((Num == 2) | (Num == 3) | (Num == 5))

    return true;

    if ((Num % 2 == 0) || (Num % 3 == 0) || (Num % 5 == 0)) {

    return false;

    } else {

    for (int i = 3; i <= long(pow(Num,0.5)); i += 2) {

    A = Num % i;

    if (A == 0) {

    return false;

    }

    }

    }

    return true;

    }



    و

    Java
    public static boolean primo(long Num) {

    long A = 0;

    if (Num == 1)

    return false;

    if ((Num == 2) || (Num == 3) || (Num == 5))

    return true;

    if ((Num % 2 == 0) || (Num % 3 == 0) || (Num % 5 == 0)) {

    return false;

    } else {

    for (int i = 3; i <= (long)Math.sqrt(Num); i += 2) {

    A = Num % i;

    if (A == 0) {

    return false;

    }

    }

    }

    return true;

    }


    خاتمة
    الأكواد تم تجربتها و بإذن الله صحيحة فهي مجربة حتى على الأرقام الضخمة مثل

    18014398241046527



    الكتاب ليس ضخم و لا كامل لأن الكمال لله و هو عمل بسيط مني

    لإثراء المكتبة العربية و الشكر الخالص لله أولاً و ثانياً لإخواني في منتدى ستار تايمز في قسم لغات البرمجة



    رابط كتاب للدرس: http://www.mediafire.com/?q6wv9gwleep9ey4


      الوقت/التاريخ الآن هو الإثنين مايو 20, 2024 8:01 pm