unknown بتاريخ: 27 يناير 2007 تقديم بلاغ مشاركة بتاريخ: 27 يناير 2007 (معدل) السلام عليكم ورحمة الله وبركاتة حياكم الله يااحبةفي البداية اعتذر الموضوع يفتقد التنسيق لاني كتبته في بضع دقائقهذه اول مشاركة لي في المنتدي وارجو من الله التوفيق وليس في هذا المنتدي فقط بل اعتقد لم اشارك من قبل الا مرتين في منتدي منذ سنواتكيف يتم اختبار العدد هل هو اولي ام لا عن طريق pl ؟!!لقد قرات احد الاخوة يريد حل لهذه المشكلة واعتقد هذا من فترة وقد رد علي احد الاخوة مشكور بالكود ولكن لم يكن الكود مرفق بالشرح علي حسب ما قراته ولهذا كتب هذه المداخلةلحل هذة المشكلة اعتقد لابد ان نعرف بعد الاشياءما هو العدد الاولي : هو العدد الذي يقبل القسمة علي نفسة وعلي الواحد فقط مثل 3 و 5 و7 وهكذاوما المشكلة في هذا العددالمشكلة هنا ياخوة ان سلوك هذه الاعداد غير منتظم (كيف) سنري1 - 3 - 5 - 7 11 - 13 - 17 23- 29 ... هكذاوهكذا نري سلوكه غير منتظم ولكن لو افترضنا ان لدينا عدد وليكن 123456789987654321كيف نعرف انه عدد اولي ام لاهذا سؤال مطروح ولابد من اجابة لنري كيف اي شخص سيقوم بالتفكير في هذا الحل1- الحل الاول : من الممكن بقسمة كل هذا العدد علي كل الاعداد السابقة له ولكن هل هذا الحل صحيح (نعم صحيح) ولكن انظر ما عدد عمليات القسمة التي تحتاج اليها لمعرفة ان هذا العدد اولي املا ستحتاج الي عدد عمليات 123456789987654320 اي بعدد الرقم ناقص واحدولكن نري هل هذا الحل هو المطلوبوهنا يجب ان نعرف ان اي مشكلة تقابلك ان ليس لك الاختيار في العمل ان تقوم بحلها ام لاانت مجبر ان تحلها ولكن ما هو الحل كما راينا في الحل الاول انه حل وصحبح ولكن ليس الحل الافضلاي ليس هو الحل optimalوما هو الحل الافضل optimal : بمعني انك ممكن ان تضع حل لمشكلة يستغرق تنفيذه بضع ايام او ربما اسابيعويحقق النتيجة وممكن ان تضع حل اخر يستغرق بضع دقائق ويحقق نفس النتيجةوهذا هو الحل الافضل الذي من المفروض ان تفكر فيه انت ولهذا نتطلب لحل افضللنفكر سويا في بعض في حلول مساعدة2- ممكن ان نفكر في حل ان نقوم بعمل عمليات القسمة علي نصف الاعداد التي تلي هذا العدد 123456789987654320ولكن كيف قد يفكر احدنا ان اي رقم المذكور نصفه ارقام زوجية اي تقبل القسمة علي اتنينواي رقم زوجي ليس اولي ما عدا الاتنينهذا حل ولكن هل هو الافضلنفكر بتعمق 3- ممكن نفكر ان نحذف منه العدد كل الاعداد التي تقبل القسمة علي 3 ومشتقاتهاجميل ولكن هل هو الافضل4-ممكن نضيف ايضا ونحذف من العدد المذكور الاعداد التي تقبل القسمة علي خمسة ومشتقاتهاحل جميل ولكن هل هو الافضل5- قد يفكر احد في ان يقول انا ساستخدم ما قولتم عليه ولكن ساقوم بعمل شئ رائع وما هو ؟الاجابة: ساقوم بعمل ما قولت عليه سابقا ولكن علي نصف العدد ( وضح الله يكرمك يعني اية)التوضيح مثلا العدد 100 اكبر رقم يقبل القسمة علية هو كام ( ؟ )هو (50 )طبعا اي نصفةوما معني هذا اننا لسنا في حاجة لتجربة مثلا قسمة العدد 100 علي 99 الي العدد 56لانه لايقبل القسمة عليه حل جميل واللهولكن ما زال لدينا عدد كبير يااخي فكر شوية6- الحل الافضل باذن الله ما هو ؟لو لاحظنا ان الاعداد التي يقبل العدد 100 القسمة عليها هي نفس الاعداد التي تقبل عليها العدد 10 القسمةطيب.. اي ان لو كان العدد 10 يقبل القسمة علي 2 يصبح العدد 100 يقبل القسمة ايضا علي اتنينولو كان يقبل القسمة علي خمسة يصبح العدد 100 يقبل ايضا القسمة علي 100وهذا يعني ان الجزر التربيعي لاي عدد نريد الاختبار انه عدد اولي ام لا يكفي ان نجرب الجزر التربيعي له لو كان عدد اولي لكان العدد الاصلي اوليونلاحظ اننا عندما استعملنا اكبر مضاعف للعدد 100 قد وفرنا 90 عملية قسمة لاننا نسقوم بالعمل علي العدد 10 فقط ولكن او كان العدد 1000.000 فما هو اكبر مضاعف له هو 1000انظر هنا قمنا بتوفير كام عملية قسمة قمنا بتوفير 999000 عملية وسيتم العمل علي 1000 فقطكلام رائعاي نقوم بعمل جزر للعدد وبهذا نكون قد وصلنا للحل ولكن يوجد الان مشكلة ما هي هل كل عدد له جزر تربيعي بعدد صحيح الاجابة :لاولكن ما الحل اذا الحل ببساطة نعمل له تقريب عن طريق round ارجو ما اكون اتعبتكم معي في هذة المشكلة ولكن لابد من التفكير المنطقي لحل اي مشكلة يااخي وانتظر تعليقاتكم حياكم اللهاي خطا فمني ومن الشيطان والتوفيق من عند اللهسبحان الله وبحمده سبحان الله العظيموالسلام عليكم ورحمة الله وبركاتة تم تعديل 28 يناير 2007 بواسطة unknown اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
unknown بتاريخ: 7 فبراير 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 7 فبراير 2007 السلام عليكم ورحمة الله وبركاتةما في رد يتم يااخوة علي الموضوع ولو حتي ينقد الموضوع اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
-=|mOOdY|=- بتاريخ: 7 فبراير 2007 تقديم بلاغ مشاركة بتاريخ: 7 فبراير 2007 عذرا اخي فلم انتبه لموضوعكاشكرك لتطرقك للموضوع واهنئك على اسلوبك الرائع في حل المشكلةعذرا على التقصير ونتمنى ان نرى المزيد من ابداعاتكتحياتي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
بورضا بتاريخ: 11 سبتمبر 2008 تقديم بلاغ مشاركة بتاريخ: 11 سبتمبر 2008 الحقيقة موضوع جميل لكن ...عندي رقم صغير جربت عليه القاعدة الأخير التي تستخدم الجذر التربيعي فيهاولم تنطبق عليه القاعدةوهو العدد 25 اذ الجذر التربيعي له هو العدد 5العدد 5 عدد أولي والعدد 25 غير أوليوهذا خلاف القاعدةأرجو التوضيح أخي العزيز ودمتم بسلام اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wahba87 بتاريخ: 13 سبتمبر 2008 تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2008 الحقيقة موضوع جميل لكن ...عندي رقم صغير جربت عليه القاعدة الأخير التي تستخدم الجذر التربيعي فيهاولم تنطبق عليه القاعدةوهو العدد 25 اذ الجذر التربيعي له هو العدد 5العدد 5 عدد أولي والعدد 25 غير أوليوهذا خلاف القاعدةأرجو التوضيح أخي العزيز ودمتم بسلام المفروض انك عايز تعرف 25 عدد اولى ولا لأبدا ما تجرب تقسمه على الاعداد من 2 الى 24بتجرب تقسم على الاعداد من 2 الى 5 (جذر 25) بسالعدد هيقبل القسمة على 5 و بكده هو مش اولى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hanyfreedom بتاريخ: 24 سبتمبر 2008 تقديم بلاغ مشاركة بتاريخ: 24 سبتمبر 2008 شكراً أخى unknown على هذه المعلومة الجميلة ..... و هذا جراء كنت قد وجدته فى منتدى اجنبى يمكن من خلاله ان تظهر كل الارقم من الواحد و حتى الرقم الذى ستضعه فى ال Parameter اللى فى الأجراء.و هذا هو ال Procedure و أسمه Primes CREATE OR REPLACE PROCEDURE PRIMES (M IN NUMBER) IS S VARCHAR2(1); R VARCHAR2(2000); I NUMBER; FUNCTION Z (Y NUMBER) RETURN NUMBER IS BEGIN IF Y > 0 THEN IF MOD(I,Y) = 0 THEN RETURN 1 + Z(Y - 1); ELSE RETURN Z(Y - 1); END IF; ELSE RETURN 0; END IF; END; BEGIN FOR X IN 1.. M LOOP I := X; IF Z(X) <= 2 THEN R := R ||S ||TO_CHAR(X,'fm9999'); S := ','; END IF; END LOOP; DBMS_OUTPUT.PUT_LINE(R); END; / و بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.