الانتقال إلى المحتوى

الاعداد الاوليه المشكلة والحل المنطقي والحل الـ Optimal !


unknown

Recommended Posts

السلام عليكم ورحمة الله وبركاتة حياكم الله يااحبة

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

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

كيف يتم اختبار العدد هل هو اولي ام لا عن طريق 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


ارجو ما اكون اتعبتكم معي في هذة المشكلة ولكن لابد من التفكير المنطقي لحل اي مشكلة يااخي
وانتظر تعليقاتكم حياكم الله


اي خطا فمني ومن الشيطان والتوفيق من عند الله

سبحان الله وبحمده سبحان الله العظيم

والسلام عليكم ورحمة الله وبركاتة

تم تعديل بواسطة unknown
رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

عذرا اخي فلم انتبه لموضوعك

اشكرك لتطرقك للموضوع واهنئك على اسلوبك الرائع في حل المشكلة
عذرا على التقصير ونتمنى ان نرى المزيد من ابداعاتك

تحياتي

رابط هذا التعليق
شارك

  • بعد 1 سنة...

الحقيقة موضوع جميل
لكن ...
عندي رقم صغير جربت عليه القاعدة الأخير

التي تستخدم الجذر التربيعي فيها

ولم تنطبق عليه القاعدة

وهو العدد 25 اذ الجذر التربيعي له هو العدد 5

العدد 5 عدد أولي والعدد 25 غير أولي
وهذا خلاف القاعدة

أرجو التوضيح أخي العزيز ودمتم بسلام

رابط هذا التعليق
شارك

الحقيقة موضوع جميل
لكن ...
عندي رقم صغير جربت عليه القاعدة الأخير

التي تستخدم الجذر التربيعي فيها

ولم تنطبق عليه القاعدة

وهو العدد 25 اذ الجذر التربيعي له هو العدد 5

العدد 5 عدد أولي والعدد 25 غير أولي
وهذا خلاف القاعدة

أرجو التوضيح أخي العزيز ودمتم بسلام


المفروض انك عايز تعرف 25 عدد اولى ولا لأ

بدا ما تجرب تقسمه على الاعداد من 2 الى 24

بتجرب تقسم على الاعداد من 2 الى 5 (جذر 25) بس

العدد هيقبل القسمة على 5 و بكده هو مش اولى
رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

شكراً أخى 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;
/


و بالتوفيق

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية