• 1
أحمد أبو عبد البر

نتيجة السؤال السابع من مسابقة الفريق العربي للبرمجة 7

سؤال

سلام عليكم

 

السؤال السابع كان أصعب مما كنت أتوقع 

 

كان نص السؤال هو

 

سلام عليكم

تقبل الله منا ومنكم صالح الأعمال

 

الحقيقة كنت مشغولا هذا الأسبوع أنا وصديقي أحمد سعود لذلك لم أحضر خوارزمية الأسبوع ولكن لكي لا يمر فارغا كورت لكم هذه التكويرة ^_^

 

المطلوب هو :

إيجاد مجموع عشرة الأعداد الأولية التي تأتي تنازليا قبل العدد   

977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845


وهي أصغر منه 

 

ثم إرسال خمسةعشرة رقما الأولى من جهة اليمين كنتيجة للسؤال

 

مثال 

9775120785964857485960254896397741250365874120999997411210225413165454746546546895445128465123321321311265465465464688797745879632541254025874


 

الرقم كان كبيرا واللغة الأنسب لمثل هذه الحسابات هي الحبيبة python

 

الجواب الصحيح هو 874879456110266

 


وهذه الخوارزمية هي التي  تم بها الحل

#!/usr/bin/pythonimport randomfrom math import logdef powerMod(a,n,m):     num_roots_operation = int(log(n)/log(2))      all_roots_calc =[]    all_roots_calc.append(a)     count = 0    root = (a*a) % m     while count != num_roots_operation:        all_roots_calc.append(root)        root = (root * root) % m        count = count+1     bin_opr= []     N=n     while N != 0:        bin_opr.append(N%2)        N = N /2     modulo = 1     while bin_opr != [] :        if bin_opr[0] == 1:            modulo =  (modulo * all_roots_calc[0] ) % m        bin_opr.pop(0)        all_roots_calc.pop(0)    return modulodef randomInt():    while True:        ZZ = int((random.random()*1000)**(random.random()*10))        if ZZ > 2:            break    return ZZdef gcd(a,b):    while b!=0:        t = b        b = a % b        a = t    return a def is_prime(x):    N = x    if x < 100:        for i in range(1,x):            if gcd(x,i) != 1:                return False        return True    while N != 0:        RndINT = randomInt()        if powerMod(RndINT,x-1,x) == 0:            continue         if powerMod(RndINT,x-1,x) != 1 :            return False        N = int(N/10.)    return Truen = 0num=977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845    somme=0while n<10 :    num-=1    if is_prime(num) :        somme+=num        n+=1print (somme)    

"ومحدش يسألني  عشان أنا مش فاهم حاجة من الكلام اللي أولتو ذا" :D

 

الخوارزمية كتبها أحد الرياضيين وهي مجربة وأنا نفسي قد تحققت من نتائجها بالمقارنة مع مواقع التحقق من الأرقام الأولية

 

وقد أجاب عنه الأخوان

 

مصطفى

العمدة

تم تعديل بواسطه أحمد أبو عبد البر
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

6 إجابة على هذا السؤال .

  • 0

الحمد لله :)

حسنا هذا هو الكود بpython

#الحمد لله :)a=977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845x=0y=0while x<10:    if (pow(2,a-1,a)==1)and(pow(3,a-1,a)==1)and(pow(5,a-1,a)==1):        x+=1        y+=a        print a    a-=2print y%1000000000000000 

 

وقد استخدمت خوارزمية بسيطة جداً .. للعالم Fermat  وقد حاولت تلخيصها هنا سابقا .. :)

والله ولي التوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
import sysx=977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845n=0total=0for i in range(0, 10000,2):        m=x-i        a=101        k=m-1        q=pow(a,k,m)               if q == 1:                                   total=m+total                  n=n+1                  if n==10:                     print total                     sys.exit("done")         

عاوز اعرف الكود ده صح و لا غلط

الاجابة كانت مختلفة لكن عندما اختبرت الحل كانت الاجابة صحيحة

 

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

تم تعديل بواسطه العمدة11
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يبدوا أن هناك خطأ في المشاركة

 

فالحل الصحيح كما قدمت وكما هو على موقع المسابقة هو : 874879456110266

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

 

اللهم اغفر سهوي وخطأي

 

والله الأمر كما قلت والنتيجة كما ذكرت هي التي وضعتها على الموقع ولكن لا أعرف كيف غفلت عنها وأنا الذي وضعتها

 

الجواب الصحيح كما قلتم هو

874879456110266

 

 

 

تم التعديل

تم تعديل بواسطه أحمد أبو عبد البر
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ليس مت الدروري الحلف بالله نحن نثق في جميع الاعضاء وخصوصا المشرفين لان الوقع هدفه الفائده العامه للجمع وللامه الاسلامه بالاخص عفرا الله لكل امة محمد صلي الله عليه وسلم اللهم امين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أنا أحب من الإخوة ان يعذروني لاني أمر هذه الايام بمشكلة اسأل الله أن يفرجها

فتعلمون من كان كذلك أنه فاقد التركيز أو ضعيفه

 

وأنا أحاول جاهدا أن أُبقي على المسابقة وأحافظ على مواعيدها ما استطعت

 

لا تنسوني من دعائكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .