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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

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


5 رد (ردود) على هذا الموضوع

#1 unknown

unknown

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 27 January 2007 - 05:06 PM

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

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

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

كيف يتم اختبار العدد هل هو اولي ام لا عن طريق 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, 29 January 2007 - 12:14 AM.


#2 unknown

unknown

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 07 February 2007 - 05:26 PM

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

ما في رد يتم يااخوة علي الموضوع ولو حتي ينقد الموضوع

#3 -=|mOOdY|=-

-=|mOOdY|=-

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,324 مشاركة

تاريخ المشاركة 07 February 2007 - 09:01 PM

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

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

تحياتي

صورة

!!! كم أنت عبقري !!!


#4 بورضا

بورضا

    عضو

  • الأعضــاء
  • 1 مشاركة

تاريخ المشاركة 12 September 2008 - 02:57 AM

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

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

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

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

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

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


#5 wahba87

wahba87

    عضو

  • الأعضــاء
  • 26 مشاركة

تاريخ المشاركة 14 September 2008 - 12:17 AM

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

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

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

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

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

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


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

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

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

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

#6 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 24 September 2008 - 04:00 AM

شكراً أخى 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;
/
و بالتوفيق