لنبدأ اليوم بإذن الله تعالى بـــــ:
الخطوات العامة للوصول لهذا الرقم :
2^43112609
ملاحظة : هذه الخطوات مطبقة ( وتم إنجاز البرنامج لها)
البداية من الرقم واحد ..
ضرب الرقم واحد ب2 عدد من المرات وهو 43112609 مرة .........هذه هي الخطوط العريضة والواضحة
هذا الكلام البسيط .. يتضح عند بداية العمل عليه عدة مشاكل وأهمها :لا يمكن الوصول لأكثر من الرقم 2^64 بالطرق المعتادة وأقصد بذلك حلقة for تتكرر 43112609 مرة
وهي أول ما يتبادر للذهن في هذه الحالة ...
وكان أول حل لهذه المشكلة ..
(ملاحظة: من يود التفكير في الموضوع لا أنصحه بقراءة السطور التالية الآن.. )
الحل كان بمصفوفة : كل قيمها أصفار إلا القيمة الاخيرة هي 1
int number[size]={0,0,0,0,0,0,0..............,1};والآن عندما نضرب ب 2 سنقوم بضرب عناصر المصفوفة بدءاً من اليسار ونضع شرط الضرب ( إذا كان العدد المضروب أكبر من 4 أضف واحد إلى العنصر السابق وخذ آحاد الناتج )
for(int i=1;i<size;i++)
{
if(number>4)number[i-1]++;//هذه عملية الحمل للمنزلة التالية
number*=2;//هنا عملية المضاعفة
number%=10;//هنا نأخذ آحاد العدد وذلك في أي حال وبذلك سيكون كل عنصر هو احد منازل الرقم
//ملاحظة : استعملنا هنا العد العشري .. ويمكن أن نعتمد أي نظام عد حتى نظام عد غير موجود سابقاً
}هذا الكود السابق يقوم بعملية المضاعفة مرة واحدة وفي حال أردنا القيام بذلك أكثر من مرة نضعه ضمن حلقة وهذا كل ما في الأمر
جسب هذا الحل يمكننا الوصول إلى 2^1000000 على الأقل وذلك خلال ساعة و 40 دقيقة حسب معالج 2.14 غيغا وهذه سرعة مقبولة ..
ولكن حتى هذا الرقم 2^ مليون لعبة أطفال أمام رقمنا 2^43مليون
......................
فكيف سنحل هذه المشكلة ....
هذه المشكلة تم حلها ونتابع في المرة القادمة بإذن الله تعالى
أنتظر تعليقاتكم وآراءكم وأفكاركم ..والسلام عليكم

