المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : العدد الأولي


ثامر أبو بلقيس
24-06-2013, 10:01 AM
السلام عليكم ورحمة الله
أخي الكريم لاشك أن العدد الأولي هو من يقبل القسمة التامة على نفسه و على العدد 1 فقط ..
مثلا 2 - 3 - 5 - 7 - 11 ...... الخ
ولتحديدها يعتمد على عدة طرائق منها التحليل الى جداء عوامل أولية أو غربلة باستغلال جدول أو القيام بحساب جذر العدد
ثم قسمته على كل الأعداد الأولية الأقل من جذره.... الخ
لكنها تبقى كلها صعبة جدا في حال الأعداد الكبيرة ستزداد حلقة الدوران و البحث

أحتاج لكود يختصر الجهد في تحديد هذه النوعية العددية

السلام عليكم

النصل القاطع
24-06-2013, 11:40 AM
لن يكون الأمر بالسهولة التى تتوقع
سيكون سهلا و لكن مع محاذير

فقط و للعلم إطلعنى على نوعية الأرقام التى ستكشف عليها
يعنى ألف أم مليون أم مليارات

كلما كبر الرقم سيستغرق الأمر وقتا طويل نسبيا
لكن حتى رقم عشرة آلاف أو بضعة عشرة آلاف

فلن يعانى الأمر من تأخير

ضع تفصيلات أكثر
و هل للأمر علاقة بتشفير

Haitham.2012
24-06-2013, 11:47 AM
أنا خايب في الحساب ..!! :abc_145: ضع ملف مفتوح لأفهم الفكره اكثر ...

النصل القاطع
24-06-2013, 11:54 AM
فى ١٠ فبراير ٢٠١٣

أعلن مؤخرًا المشتركون في مشروع البحث الكبير عن أعداد ميرسين الأولية في الإنترنت عن توصل كرتيس كوبر لأكبر عدد أوَّلي معروف. ويتكون هذا العدد من أكثر من ١٧ مليون رقم. متفوقًا بذلك على ما سبق اكتشافه في ٢٠٠٨ والذي يتكون من أكثر من ١٢ مليون رقم. وتُقدِّم مؤسسة الحدود الإلكترونية جوائز مالية لاكتشاف تلك الأعداد. وتعرض مكافأة مالية قدرها ١٥٠٠٠٠ دولار أمريكي عند اكتشاف أكبر عدد أوَّلي يتكون من ١٠٠ مليون رقم. وقد استغرق الحاسب الآلي ٣٩ يومًا للتحقُّق من العدد الجديد. ويتميز العدد الأوَّلي عن غيره من الأعداد الصحيحة بعدم قابليته للقسمة إلا على نفسه وعلى العدد ١ فقط. ويفسر أحد المشتركين في هذا المشروع سر الاهتمام بالعثور على الأعداد الأولية على أنه يمثل تحديًا مثيرًا يشبه في ذلك الصعود لقمة جبل إيفرست.

فهمت المغزى من سؤالى السابق أبو بلقيس ؟

ثامر أبو بلقيس
24-06-2013, 03:33 PM
السلام عليكم ورحمة الله
استاذي هيثم تمنيت لو توفر ملف مفتوح ينطوي على === أكواد === للحل
لأرسله لك .. لكن قد أرسل لك ما يشرح ذلك
أستاذ خالد .. أنا أدرك تماما ما تفضلت به و ادرك الصعوبة البالغة في برمجة دقيقة غير محدودة
فالعمل بالجذر و الباقي باستغلال Math.Sqrt و Math.Mod لن يجدي كون أننا سنحتاج
للأعداد الأولية لقيمة الجذر ؟؟
على كل جربت استغلال قابلية القسمة على الاعداد الزوجية و العددين 3 و 9 , و للعدد 5 , و يدوية القسمة على 7
لكن النتائج غير مرضية عند تربيع العدد الأولي تصبح القاعدة غير مضبوطة
يبقى نظريا تخزين قيم و التي هي اساسا أعداد أولية يتم فيها البحث ليعلن النتيجة و هذا ليس حل برمجي
لهذا سأطلب نموذجا لما تفضلت به وليكن مثلا نوعية الأعداد ألاف على أساس أن أكون صريحا معك الأستاذ خالد
أريد معادلات رياضية و ليس عملية بحث في قيم مخزنة
لك مني فائق التقدير و الاحترام

النصل القاطع
24-06-2013, 05:44 PM
أستاذ خالد .. أنا أدرك تماما ما تفضلت به و ادرك الصعوبة البالغة في برمجة دقيقة غير محدودة
فالعمل بالجذر و الباقي باستغلال Math.Sqrt و Math.Mod لن يجدي كون أننا سنحتاج
للأعداد الأولية لقيمة الجذر ؟؟
أضحك الله سنك أخى

على أساس أن أكون صريحا معك الأستاذ خالد
أريد معادلات رياضية و ليس عملية بحث في قيم مخزنة
لك مني فائق التقدير و الاحترام

و هل تعرف أن هذا أسلوبى ؟؟

نأتى للجد
الأمر فى غاية البساطة
و سؤالى لك عن عدد المنازل الخاصة بالرقم كان حفاظا على سرعة البرنامج ليس أكثر
الذين ربحوا 100 ألف دولار إنتظروا البرنامج 39 يوما متصلا لكى تنهى الدالة عملها
و أعلم أن هذا ليس هدفك
و فى الغالب أنت تبرمج برنامج رياضى بسيط

إليك الحل
بفرض أن مشروعك يحتوى على إنبوت إسمه Input1
و زر

فى الجلوبال فنكشن ضع تلك الدالة
function chk_prim(x)
x=Input.GetText("Input1");
x = String.ToNumber(x);
if x<=0 then return false end
if x<=2 then return true end
if (Math.Mod(x, 2)==0) then return false end
for i=3,x/2,2 do
if (Math.Mod(x, i)==0) then
return false end
end
return true
end

و ضع فى الزر هذا الكود
chk_prim(x)
if chk_prim()==true then
Dialog.Message("Notice", "Prim." , MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
else
Dialog.Message("Notice", "Not prim", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end

أكتب الرقم فى الإنبوت
ثم إضغط على الزر
و خبرنى

مثال
هذا الرقم الأولى
16581067
يستغرق أربعون ثانية للكشف عليه بجهازى المتواضع

ثامر أبو بلقيس
25-06-2013, 12:22 AM
http://im41.gulfup.com/6NSYr.swf

النصل القاطع
25-06-2013, 12:37 AM
http://im41.gulfup.com/6nsyr.swf

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

عموما لا مشاكل
بالتوفيق

ثامر أبو بلقيس
25-06-2013, 12:42 AM
أستاذ خالد لم أجد ردا جميل فأرسلت ملف مرئي يوضح قوة الأكواد التي أرسلتها
بارك الله فيك كل الاحترام ضمنته في الملف ...

النصل القاطع
25-06-2013, 12:55 AM
استاذ ثامر
لم ألزمك و لم أطلب منك أن تشكرنى
فقط كان المطلوب منك أن تتعب قليلا و توضح لنا كتابة أن إستفسارك قد تم حله أم لا بوضوح
كما أجهدت نفسك و كتبت إستفسارك بكل وضوح

عموما سأعتبر أن إستفسارك قد تم حله (يؤسفنى أننى عن جد غير متأكد)
لأنه حتى الآن أنت لم تكتب النتيجة بوضوح

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

ثامر أبو بلقيس
25-06-2013, 01:04 AM
أولا : أنا جد متأسف لك و لكل زملائي فعلا كان من المفروض أن أراعي ما ذكرت
على كل الأكواد قياسية جدا أدت المطلوب و أكثر و خاصة السرعة المذهلة في اصدار الحكم لأعداد ضخمة جدا
قمت بتجربة عدة أعداد و كانت كل مرة النتيجة صحيحة ... ثم قمت بمقارنة العمل مع الأكواد المتضمنة في
الاضافة sina فعجزت الاضافة على مواكبة الأكواد لأنها توقفت في رتبة أقل بكثير

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

أعتذر كثيرا و أتمنى أن تشاهد الملف المرئي المباشر لأني ضمنته النتائج مباشرة من على الجهاز

النصل القاطع
25-06-2013, 01:33 AM
أستاذ ثامر
للتو شاهدت ملفك

و لذلك نصحتك بالتواصل الكتابى
هنا معلومة لم تصل إليك بشكل صحيح

سيتباطأ البرنامج كثيرا عند فحص رقم أولى
لكن كل الأرقام الأولية دون المليون لن تستغرق زمنا أكثر من ثانية واحدة
لكى تفهم وجهة نظرى وتفهم سرعة الكود بشكل صحيح
إكشف عن الرقم الأولى 16581067
و هو رقم بعشرات الملايين و ستفهم قصدى

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

يجب أن يتواجه البرنامج مع أعداد أولية
راجع أرقام من الملف النصى المرفق
و ستجد البرنامج سريع جدا حتى أرقام أولية بمنزلة مئات الألاف فقط

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

ثامر أبو بلقيس
25-06-2013, 01:42 AM
قمت بتحميل المستند النصي لأجربه في البيت لكن هذا لا يمنع أبدا
أن أقول بأنك أبدعت في ايجاد أكواد بحثت عنها كثيرا و كثيرا و لم اجدها صريحة
بمثل التي طرحت
على كل الحمد لله أنك إطلعت على الرد عسى أني قدرت مجهودك أخي و استاذي الكريم
البطء مع نتائج دقيقة أفضل بكثير من إنعدام طريقة للحل ... تلك غايتي و أكرر بارك الله فيك
سأرد في الغد إن شاء الله :abc_152:

النصل القاطع
25-06-2013, 01:49 AM
حسنا أخى أبو بقيس
مثال أخير لكى يفهم الجميع قصدى
رقم مثل
22222222222222222222222222222222222222222222222222 2222222222
سيقوم الكود بقسمته على 2 فيقبل بدون باقى
فتنكسر الحلقة بالأمر break فورا
و لن تعمل الحلقة باقى الإختبارات و لن تستهلك أى وقت
سينكشف أمره من أول دورة للحلقة

مثال أخر :-
رقم مثل
33333333333333333333333333333333333333333333333333 3333333333
سينكشف للحلقة من ثانى دورة

لنفهم معا طبيعة الحلقة
الحلقة تقسم مثلا على 3 فلو ظهر باقى تقسم على 4 فلو ظهر باقى تقسم على 5 و هكذا حتى يتصادف القسمة على رقم لا يعطى باقى فتنكسر الحلقة فورا

سر السرعة مع الأرقام الغير أولية
غالبا لا يدور العدد الغير أولى فى الحلقة أكثر من 10 دورات و تكتشفه الحلقة

سر بطئ الأرقام الأولية
رقم أولى مثل 16581067
فهو رقم أولى لا يقبل القسمة بدون باقى إلا على نفسه
هل تعرف معنى ذلك ؟؟؟
سيدور فى الحلقة 16581067 دورة حتى ينقسم على نفسه بدون باقى
ستة عشر و نصف مليون دورة فى الحلقة البرمجية
لابد أن تستهلك وقتا ملموسا

أظن أصبح الأمر واضح لك و سيفسر لك سر تباطؤ الكشف عن الأرقام الأولية فوق المليون
كما سيوضح لك لماذا ربح أحد المبرمجين 150 ألف دولار مقابل إكتشافه لرقم أولى يتألف من 13 مليون منزلة
و لماذا إستغرق إكتشافه 39 يوم متواصل لبرنامج الكشف و على جهاز جبار و غير تقليدى

أما عن سر تباظؤ الإضافة SINA فى الكشف عن الأعداد الغير أولية
فهذا بالتأكيد يرجع لعدم التوزيع الصحيح لأوامر BREAK الخاصة بكسر و إيقاف الحلقة فى الوقت المناسب (خطأ منطقى برمجى)

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

امل الماضي
25-06-2013, 07:54 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

ثامر أبو بلقيس
25-06-2013, 11:08 AM
السلام عليكم ... قمت بتجربة أعداد أولية و فعلا تتغير السرعة
بسبب تلك الدورة في البحث كما أشرت في بداية المشاركات ... لكن
سأعتمد مبدأ كل ما يبدأ الملف يفكر ويبحث ببطء فإن العدد أولي ..
لمباشرة العمل بها ....

هل تتوفر الاضافة mathex في الاصدار 8 ؟

سأحاول التفكير في التخفيف من البطء على الاقل بنسبة 50 بالمائة

النصل القاطع
25-06-2013, 12:08 PM
لكن
سأعتمد مبدأ كل ما يبدأ الملف يفكر ويبحث ببطء فإن العدد أولي ..

لا تنفع هذه الفكرة (قد تؤدى للحكم على أعداد أولية بأنها غير أولية)
بمعنى أدق
فكرتك هذه مفيدة فى نفى عدم الأولية
و للمفارقة فهى لا تصلح لإثبات الأولية
للتوضيح
ماذا لو كنت تكشف عن رقم فردى يتكون من عشرة آلاف منزلة ؟؟
سيحدث تباطؤ سواء كان العدد أوليا أو غير أولى


سأحاول التفكير في التخفيف من البطء على الاقل بنسبة 50 بالمائة
فكرة جيدة
و أظنها تتمحور حول فكرة أخذ جذر الرقم أولا ثم القسمة على الأرقام أقل من الجذر
و عدم القسمة على الأرقام الأعلى من الجذر
أليس صحيح ؟
الدالة الأصلية
function chk_prim(x)
x=Input.GetText("Input1");
x = String.ToNumber(x);
if x<=0 then return false end
if x<=2 then return true end
if (Math.Mod(x, 2)==0) then return false end
for i=3,x/2,2 do
if (Math.Mod(x, i)==0) then
return false end
end
return true
end
إليك الدالة المعدلة و أطلعنى على فكرتك
function chk_prim(x)
x=Input.GetText("Input1");
x = String.ToNumber(x);
if x<=0 then return false end
if x<=2 then return true end
k = Math.Sqrt(x);
if (Math.Mod(x, 2)==0) then return false end
for i=3,k,2 do
if (Math.Mod(x, i)==0) then
return false end
end
return true
end
تم إضافة السطر السادس (حساب جذر الرقم المراد الكشف عن أوليته)
و تعديل السطر الثامن (التعامل بالجذر كحد أقصى لحلقة for بدلا من جعل نصف الرقم هو الحد الأعلى)
الدالة تم تجربتها بنجاح
و تعطى النتائج الصحيحة بنصف الوقت
مثال
الرقم 16581067
نصفه يساوى 8290533
بينما جذره 4071
فرق كبير بين أن تدور الحلقة ثمانية ملايين مرة و بين أن تدور بضعة آلاف من المرات

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

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

ثامر أبو بلقيس
25-06-2013, 01:24 PM
هذا ما اشرت إليه أستاذي منذ البداية و هو ربح نصف المسافة
باستعمال الجذر النتائج بدت لي صحيحة و في زمن تقلص للنصف

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

سؤالي : أين تم تعويضها في هذا الكود الرائع الذي بخر كل أفكاري بارك الله فيك


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

النصل القاطع
25-06-2013, 01:34 PM
فضول كبير ورغبة في التعلم تدفعني أن أسأل عن الدالة Math.Floor لماذا لم تستعملها ؟
لأننا عند جذر العدد س سيعطينا الناتج ع و الذي سيكون كما تعرف أستاذي قد يكون بالفواصل
نستغل الدالة للتقريب إلى الاسفل و من ثمة بناء الفكرة سهرت الليل كله حول النقطة

سؤالي : أين تم تعويضها في هذا الكود الرائع الذي بخر كل أفكاري بارك الله فيك

و هذا أيضا أحد أسرار البرمجة
الدالة FOR حالة خااصة و لا تنظر إلا إلى الأعداد الصحيحة
و تتجاهل كل ما هو يمين الفاصلة
طالما كان طول الخطوة 1 صحيح
هنا السؤال
أين كتبت أنا طول الخطوة ؟؟
لم أكتبه
و لذلك قامت for بتعيينه تلقائيا بتعيين الواحد الصحيح

جرب هذا الكود و ستفهمنى تماما
for i = 1,7.56 do
Dialog.Message("Notice", i, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end
عرفت أنه لا حاجة للدالة floor مع حدود الدالة for ؟
لم تصل الفكرة ؟؟
حسنا
جرب هذا الكود الذى يندر أن يتطرق إليه أحد من قبل
سنشترط طول الخطوة نصف
فى نفس الحلقة السابقة
for i = 1,7.56,.5 do
Dialog.Message("Notice", i, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end

أظن الأمر بات واضحا جدا الأن

بالتوفيق أخى العزيز

ثامر أبو بلقيس
25-06-2013, 01:44 PM
معلومة جديدة عني لم أكن أعرفها ومفيدة للغاية
جزاك الله خيرا و إن جد جديد حول إمكانية استغلال ناتج ناتج الجذر سنتواصل === تفكير نظري لا أكثر لا قواعد له رياضية صادفتها ===

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

النصل القاطع
25-06-2013, 01:49 PM
بالتوفيق أخى
خالص تحياتى

أبو فارس
27-06-2013, 02:05 PM
وفقك الله وأثابك ونفع بك

موفق بإذن الله ... لك مني أجمل تحية .

رعد الحواسيب
03-07-2013, 09:00 AM
بسم الله ماشاء الله تبارك الله عقلية الأستاذ خالد مع عقلية الأستاذ أبو قيس تخرج لنا أروع الأكواااد

سائرون على الدرب وراءكم إن شاء الله

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

ثامر أبو بلقيس
03-07-2013, 01:31 PM
أخي رعد ..... كمية الطيبة التي رافقت ردك زادك للموضوع توهجا:abc_022:
وفقك الله في كل مساعيك

رعد الحواسيب
03-07-2013, 02:51 PM
أعزك الله أخي أبو قيس ورفع شأنك