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

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

بدأه أحمد أبو عبد البر في 25 أكتوبر 2013 · 6 رد · 1,672 مشاهدة · في المسابقات البرمجية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام عليكم

 

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

 

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

 

سلام عليكم

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

 

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

 

المطلوب هو :

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

977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845


وهي أصغر منه 

 

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

 

مثال 

9775120785964857485960254896397741250365874120999997411210225413165454746546546895445128465123321321311265465465464688797745879632541254025874


 

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

 

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

 


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

#!/usr/bin/python
import random
from math import log
def 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 modulo

def randomInt():
    while True:
        ZZ = int((random.random()*1000)**(random.random()*10))
        if ZZ > 2:
            break
    return ZZ

def 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 True



n = 0
num=977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845
    
somme=0
while n<10 :
    num-=1
    if is_prime(num) :
        somme+=num
        n+=1

print (somme)

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

 

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

 

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

 

مصطفى

العمدة

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 27 أكتوبر 2013 في 19:51

1

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#2

الحمد لله :)

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

#الحمد لله :)
a=977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845
x=0
y=0
while 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-=2
print y%1000000000000000

 

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

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

#3
import sys
x=977512078596485748596025489639774125036587412099999741121022541316545474654654689544512846512332132131126546546546468879798133987487945612845
n=0
total=0
for 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 في 26 أكتوبر 2013 في 19:36

#4

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

 

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

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

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

#5

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

 

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

 

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

 

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

874879456110266

 

 

 

تم التعديل

تم تعديل هذه المشاركة بواسطة أحمد أبو عبد البر في 27 أكتوبر 2013 في 19:53

1

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#6

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

#7

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

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

 

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

 

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

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

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