المشكلة رقم 10:
مجموع العداد الأولية تحت 10 هو: 2 + 3 + 5 + 7 = 17
المطلوب:
أجد مجموع كل الأعداد الأولية تحت مليونين.
الحل:
الشرح:
1. نستدعي وحدة الرياضيات math بواسطة التعليمة import
2. نكتب دالة isPrime وظيفتها إختبار العدد الذي تتوصل به كمعيار n هل هو أولي أم لا. ذاخل هذه الذالة ننشئ قائمة بكل العداد بداية من 2 حتى جدع تربيع العدد n مع تفادي كل مضاعفات العدد 2
3. نكتب دالة وظيفتها إنشاء قائمة primes بكل الأعداد من 2 حتى n مع إجتناب مضاعفات العدد 2 و بشرط أن يكون أوليا، ثم بعد ذلك نستخدم الدالة sum حتى تحسب مجموع أعداد هذه القائمة.
4. يتم عرض النتيجة بإستخدام print
مجموع العداد الأولية تحت 10 هو: 2 + 3 + 5 + 7 = 17
المطلوب:
أجد مجموع كل الأعداد الأولية تحت مليونين.
الحل:
import math
def isPrime(n):
nbrs = [2] + range(3, int(math.sqrt(n))+1, 2)
for i in nbrs:
if n % i == 0:
return False
return True
def sumPrimes(n):
primes = [2] + [x for x in range(3, n, 2) if isPrime(x)]
return sum(primes)
print sumPrimes(2000000)
def isPrime(n):
nbrs = [2] + range(3, int(math.sqrt(n))+1, 2)
for i in nbrs:
if n % i == 0:
return False
return True
def sumPrimes(n):
primes = [2] + [x for x in range(3, n, 2) if isPrime(x)]
return sum(primes)
print sumPrimes(2000000)
الشرح:
1. نستدعي وحدة الرياضيات math بواسطة التعليمة import
2. نكتب دالة isPrime وظيفتها إختبار العدد الذي تتوصل به كمعيار n هل هو أولي أم لا. ذاخل هذه الذالة ننشئ قائمة بكل العداد بداية من 2 حتى جدع تربيع العدد n مع تفادي كل مضاعفات العدد 2
3. نكتب دالة وظيفتها إنشاء قائمة primes بكل الأعداد من 2 حتى n مع إجتناب مضاعفات العدد 2 و بشرط أن يكون أوليا، ثم بعد ذلك نستخدم الدالة sum حتى تحسب مجموع أعداد هذه القائمة.
4. يتم عرض النتيجة بإستخدام print
int i, j somme=0;
ردحذفwhile (i<2000000 && j<2000000 && i%j!=0)
{
somme+=i;
}
printf("%i", somme);
صحيح هكذا؟
استخدمت while التي نصحتني سابقا بها، ما دام i و j أصغر من مليونين و i عدد أولي فالمتغير somme يستقبل قيمة i و يضيفها لقيمته الأولية.
ثم نطبع النتيجة طبعا :)
لقد كتبت الحل مع الشرح.
ردحذف@محمد: جيد :) و لكن حلقة واحدة لن تكفي للتسلسل حول كل الأعداد و إختبار هل هي أولية أم لا.