الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اختبار الرقم الكبير .. هل هو أولي؟

بدأه مصطفى 36a2 في 27 أبريل 2012 · 28 رد · 14,571 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#26

ما شاء الله عليك أخي أحمد ...

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

أنت الآن جسدت لغة PHP كطريقة تفكير ... وببراعة ...

ولكن (وبما أنه لا يوجد غيري وغيرك في هذه المعمعة ) فقد يكون التنفيذ محبطاً لك بعض الشيء ...

على أي حال الفكرة رائعة بالفعل ... وستكون من أوائل الحلول أمامنا لحل مشكلة سرعة الاختبار ..بعد أن ننتهي من تنظيم الأكواد معاً ....

ولكن :

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

لا بد أنك قصدت :الأعداد الأولية ... لأن عدد الأعداد الفردية بين 1 والمليون هو 500ألف بينما عدد الأرقام الأولية بين الواحد والمليون هو 9999 عدد فقط ...

ويتضح الفرق الشاسع بين تكرار الاختبار 500ألف مرة أو 10 آلاف مرة ( مع العلم أن أكبر كثافة للأعداد الأولية هي في الأعداد الصغيرة )... لذلك أظن أنه مجرد خطأ مطبعي ...

بالمناسبة : ذكرت في ردي السابق

اقتباس
وهذا التخزين يمكن أن يكون بأي صيغة ولا يشترط فيه أن يكون مفهوما من قبل المستخدم ... (هناك فكرة سأذكرها لا حقا قد نتمكن من خلالها من الاستغناء عن الملفات )

الفكرة التي كنت أريد ذكرها ... قد تجعلنا نستغني عن الملفات والتي تأخذ وقتا كبيرا في النقل والاستيراد ...

الفكرة هي ضغط الرقم بطريقة ما ( طبعا علينا اختراع طريقة ضغط خاصة بالأرقام ... ) لم أفكربالأمر حتى الآن ... ولكن قد نفكر في ذلك عندما ننتهي ...

جزاك الله خيرا على تشجيعك أخي أحمد ... ربما لم أكن لأصل إلى هنا لولا ذلك ... فالحمد لله ...

وانتظر مني الانتهاء من التجميع خلال يومين بإذن الله تعالى ...

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

ملاحظة : سأسرح الكود الذي أرفقته في ردي السابق شرحا مفصلا اليوم أو غداً ...مع شرح الخوارزمية ... بإذن الله تعالى ...

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 1 يوليو 2012 في 10:08

1
#27

السلام عليكم

بارك الله فيك أخى العزيز مصطفى على كلماتك الجميلة .

اقتباس
لا بد أنك قصدت :الأعداد الأولية ...
قصدت الأعداد الفردية لأن إيجاد الأعداد الأولية تحت الجذر فى كل مرة يتطلب وقت أكبر من القسمة على الأعداد الفردية ولكن إن تمت تخزين هذه الأعداد الأولية حتى لا نحتاج لحسابها دورياً فبالطبع هذا أفضل بكثير من الأعداد الفردية كما تفضلت أنت بالشرح مسبقاً .
اقتباس
جزاك الله خيرا على تشجيعك أخي أحمد ... ربما لم أكن لأصل إلى هنا لولا ذلك ... فالحمد لله ...
هذا من فضل الله علينا , ومن إجتهادك أخى الكريم .

- هل تعلم أن نفس هذا الموضع هو مشوارى مع البرمجة عندما كنت أدرس لغة fortran منذ ثنتان تقريباً , وأخبرنى أحد زملائى فى قسم الرياضيات بجائزة لأكبر عدد أولى يتم التوصل إليه ومن ثم قم بسؤال معيد بالقسم عن كيفية إيجاد الرقم الأولى العادى فقال لى إبحث بنفسك ومن هنا بدأ مشوارى مع البرمجة بدأت فى فى تنفيذ البرنامج وقمت بتحسينة شيئاً فشيئاً ثم تركته , ولهذا أرفقت مشاركة هنا فى المنتدى بهذا الموضوع لعموم الفائدة .

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

وفقك الله لما يحب ويرضى

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#28

بسم الله الرحمن الرحيم

السلام عليكم أخي العزيز أحمد,والسلام عليكم جميعاً ..

لا أريد أن أكون متشائماً ولكن اكتشفت بعد دراسة طويلة للموضوع ككل .. أنه يستحيل .. وأشدد على كلمة "يستحيل " أن نصل إلى الرقم الأولي

بواسطة الخوارزمية الحالية ..

صحيح أننا عملنا كثيراً .. واستمتعنا بوضع خوارزميات للتعامل مع الأرقام الضخمة ..

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

لماذا ؟؟

سأجيبك ..happy.gif

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

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

الأقل من 10 هو 4

الأقل من 100 هو 25

الأقل من مليار هو حوالي 51مليون

الأقل من 1,000,000,000,000,000,000,000,000 هو

هل أنت مستعد للصدمة ؟؟

18,435,599,767,349,200,867,866

أي أننا يجب أن نقوم ب

18,435,599,767,349,200,867,866

في أسوأ الحالات

وهذا الرقم يستحيل معه ما يلي :

أولاً . يستحيل حفظ هذا العدد من الأرقام ولو استعملنا كل ذواكر العالم

لو أخذ كل رقم بت واحد ستحتاج إلى 1,676,708 تيرا بايت

ثانياً.يستحيل القيام بهذا العدد من الاختبارات ولو انتظرنا ألف عام

لو أخذت كل عملية واحدا بالألف من الثانية سنحتاج 59,936,796 سنة

ولو قمنا بتوزيع العمل على مليون جهاز سنحتاج 58 سنة laugh.giflaugh.giflaugh.giflaugh.giflaugh.giflaugh.giflaugh.gif

ثالثاً. حتى لو كان كل ما ذكرته ممكناً فحتماً ::يستحيل أن نقوم بكل ما سبق بالنسبة لأرقام من 12مليون منزلة

سنخرج عن كوننا بشراً عندها wacko.gifwacko.gif

تخيل أنك ستقوم بعدد من الاختبارات لا يمكنك لفظ رقمه laugh.gif

لا أدري كيف قام بها فريق الGMP ولكن حسب المعلومات التي لدينا ..

يبدو أن الأمر انتهى ..

شكراً لك .. جزيلاً على تشجيعك الدائم ... شكرا للجميع ...smile.gif

نلتقي في مشروع ناجح في المرة القادمة إن شاء الله تعالى ...laugh.gif

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

تحياتي للجميع

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 31 يوليو 2012 في 21:54

#29

السلام عليكم ورحم الله ,,,

تحية طيبة الى الاخوة الكرام و المناقشة الممتعة 

اود ان اضيف ان اختبار القسمة لتحديد اولوية العدد هو من قبل الميلاد ولا يستخدم حاليا انما توجد خوارزميات احدث بكثير منها ما يعطى نتيجة بدقة yes ,no or maybe و منها ما يعطى بدقة عالية جدا يمكنك البحث عن aks test و elliptic curve و apr test و غيرها من الطرق مع رأيى المتواضع ان التقدم فى دراسة elliptic curves  سيكون المستقبل لتسريع هذا الاختبار 

1

مواضيع مشابهة