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

طباعة الأرقام الاوليه

بدأه mhewedy في 17 يونيو 2010 · 10 رد · 3,781 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم,,

بما إني مبتدأ في ال C فتقبلو مني هذا البريمج الذي يطبع الأرقام الأوليه (برنامج أولى أيضا) :D

(طلع عيني عشان أكتبه, ههههههههههههههه)

#include <stdio.h>

void print_prime_numbers(int);

int main(void){

	printf("Enter max number: " );
	int number;
	scanf("%i", &number);

	print_prime_numbers(number);

	return 0;
}

void print_prime_numbers(int number){
	_Bool is_prime_number(int);

	int i;

	for (i=number; i>1; i--){
		if (is_prime_number(i) == 1)
			printf("%i is a prime number\n", i);
	}
}

_Bool is_prime_number(int num){
	int i;
	for (i = num-1; i>1; i--){		// prime divided only by itself (hence num-1) and by 1 (hence i>1)
		if (num%i == 0)	
			return 0;
	}
	return 1;
}
3
#2

الله ينور وبالتوفيق في عالم ال C

--

Mina Fouad

Computer & Systems Engineering Dpt.

Faculty of Engineering

Alexandria University

#3

جزاك الله خيراً على المثال.

لدي سؤالان:

1- لماذا وضعت النموذج المصغر للدالة is_prime_number داخل الدالة print_prime_numbers؟

2- النوع _Bool هل هو موجود داخل stdio.h؟

جزاك الله خيراً، وبالتوفيق في عالم C وC++ بإذن الله :)

هذه الجملة خاطئة  :wacko: 


#4

السلام عليكم

لدي ملاحظتان على دالة اختبار الأعداد الأولية :

1- لاداعي لتجربة قابلية القسمة على جميع الأعداد الأقل من الرقم الذي تريد التحقق منه وسأوضح ما أريد بمثال :

إذا كنت تختبر الرقم 49 مثلا فإننا نجرب القسمة من الرقم 2 وحتى الرقم الذي نختبره مقسوما على 2 ( بدون فاصله يكون 24 ) .

2- الاختبار يكون تصاعديا بداية من الرقم 2 .

بتطبيق الملاحظتين ستلاحظ الفرق بالسرعة عند اختبار عدد كبير جدا من الأعداد :)

بالتوفيق

2
#5

موضوع مميز.... من عضو مميز :wink:

تم تعديل هذه المشاركة بواسطة اسراء شلبى في 17 يونيو 2010 في 14:13

00020309t.gif

1958_1963.gif
#6
اقتباس

1- لماذا وضعت النموذج المصغر للدالة is_prime_number داخل الدالة print_prime_numbers؟

2- النوع _Bool هل هو موجود داخل stdio.h؟

1- لأني لا أحتاج أن أستخدمها في أي مكان أخر في البرنامج سوي الدالة print_prime_numbers

2- نعم

اقتباس
1- لاداعي لتجربة قابلية القسمة على جميع الأعداد الأقل من الرقم الذي تريد التحقق منه وسأوضح ما أريد بمثال :

إذا كنت تختبر الرقم 49 مثلا فإننا نجرب القسمة من الرقم 2 وحتى الرقم الذي نختبره مقسوما على 2 ( بدون فاصله يكون 24 ) .

2- الاختبار يكون تصاعديا بداية من الرقم 2 .

1- صحيح, كلامك مظبوط

2- نعم أيضا, كلامك صحيح

اقتباس
موضوع مميز.... من عضو مميز wink.gif

تلامذتك أختي إسراء :D

لي سؤال, بعدما كتبت البريمج بالأعلى, إكتشفت أن هناك نوع إسمه bool موجود في stdbool.h و يأخذ القيم true و false

إذن أيهم أفضل, إستخدام int أم _Bool أم bool عند التعبير عن القيم البولينيه ؟

#7

الصراحة... السؤالان اللذان استفسرت عنهما لم يعملا معي في VC++6، حيث أنه لم يقبل وجود نموذج is_prime_number داخل print_prime_numbers، ولم يتعرف على النوع Bool_.

في C++ يستخدم النوع bool دائماً، لكنه معرف في اللغة نفسها وليس في مكتبة...

بدأت أرتبك :S هل هو من الفروق بين C وC++ أم ماذا؟؟؟

جزاك الله خيراً :)

وكذلك الشكر للأخ الذي وضع طريقة أخرى أكثر سرعة :)

هذه الجملة خاطئة  :wacko: 


#8

لا داعى من القسمه على الأرقام من 2 و حتى الرقم الذى تريد التحقق منه يكفى القسمه على الأرقام من 2 و 3 و 5 و 7 حيث ان اى رقم يمكن ان يتم تحليله ى النهايه إلى مجموعه من هذه الأرقام

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 17 يونيو 2010 في 17:33 — السبب: تم حذف الرقم 9

−1

مدونتي: C++ Tips and Tricks

#9
اقتباس

لا داعى من القسمه على الأرقام من 2 و حتى الرقم الذى تريد التحقق منه يكفى القسمه على الأرقام من 2 و 3 و 5 و 7 حيث ان اى رقم يمكن ان يتم تحليله ى النهايه إلى مجموعه من هذه الأرقام

لكن ألن يظهر لي بهذه الطريقة أن 121 عدد أولي؟؟؟

مع أنه يقبل القسمة على الـ11.

جزاك الله خيراً

ملاحظة: الأستاذ خالد يكتب رداً منذ نصف ساعة :D ما زلت بانتظاره :)

تم تعديل هذه المشاركة بواسطة Abboodd في 17 يونيو 2010 في 17:46

هذه الجملة خاطئة  :wacko: 


#10

أخ هويدي, جميل :)

فقط عليك وضع declaration إضافية:

/* If you want to use functions in no specific order(textual representation),
   Then, it is better to write declarations for all functions before their bodies. */
void print_prime_numbers(int);
_Bool is_prime_number(int num);

إضافة إلى ذلك, فأنت تحتاج إلى التحقق من قابلة القسمة للعدد من 2 إلى جذر العدد فقط. لاحظ أنه لو كانت الأعداد الأولية لديك جاهزة, فكل ما تحتاجه هو التحقق من قابلة القسمة للعدد على أي عدد أولي بين 2 و جذر العدد(إذا كان أولياً). هل تريد الإثبات :P بالطبع التحقق من 2 إلى العدد/2 أكثر من المطلوب.

بالنسبة للنوع Bool_ فهو نوع استحدث في C99, و لكن تم تعريف define# له باسم bool في stdbool.h, و لكن استخدم int إذا كنت تريد نصيحتي, هي المستخدمة في العادة لدى مبرمجي C.

اقتباس
لا داعى من القسمه على الأرقام من 2 و حتى الرقم الذى تريد التحقق منه يكفى القسمه على الأرقام من 2 و 3 و 5 و 7 حيث ان اى رقم يمكن ان يتم تحليله ى النهايه إلى مجموعه من هذه الأرقام

ماهي هذه الطريقة؟ المعلوم أن التحقق من كون العدد أولي أم لا عملية صعبة حسابياً (جميع الطرق تعتمد على حجم العدد, و ليست ذات تعقيد ثابت).

الخطوة التالية, هي أن تقوم بكتابة sieve of eratosthenes, و هي بسيطة جداً. و استخدم فيها malloc لحجز المصفوفة التي تعمل عليه الخوارزمية. هل تريد أن نطبقها سوية؟

أخ محمد:

اقتباس
لا داعى من القسمه على الأرقام من 2 و حتى الرقم الذى تريد التحقق منه يكفى القسمه على الأرقام من 2 و 3 و 5 و 7 حيث ان اى رقم يمكن ان يتم تحليله ى النهايه إلى مجموعه من هذه الأرقام

هذه ستكتشف لك أي عدد يقبل القسمة على 2 أو 3 أو 5 أو 7 أو حاصل مضروب مجموعة منهم, و لكن إذا كان هناك عدد عن تفكيكه لعوامله الأولية الأخرى, لا يقبل القسمة على تلك الأعداد, و لكنه يقبل القسمة على عوامله الأولية الأخرى كـ 11, 13, 17, 19 ....

اقتباس
ملاحظة: الأستاذ خالد يكتب رداً منذ نصف ساعة :D ما زلت بانتظاره :)

اكتب شوي و اترك شوي :lol:

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 17 يونيو 2010 في 17:55

1
#11
اقتباس
لكن ألن يظهر لي بهذه الطريقة أن 121 عدد أولي؟؟؟

مع أنه يقبل القسمة على الـ11.

اقتباس
ماهي هذه الطريقة؟ المعلوم أن التحقق من كون العدد أولي أم لا عملية صعبة حسابياً (جميع الطرق تعتمد على حجم العدد, و ليست ذات تعقيد ثابت).

ايوه كلامكم صحيح، الأعداد الأوليه لا توجد طريقة محدده للحصول عليهم لإنه لا يوجد عدد أولى نهائى، الكلام اللى انا قلته ده جزء من Fundamental Theorem of Arithmetic و اللى بتنص على أن اى رقم اكبر من الواحد ممكن يتم تحليله إلى مجموعه من الأرقام الأوليه (كنت شفتها فى درس Joy Of Primes لـ د. ارثر بنجامين).

السلوك دخلت فى بعضها عندى :wub:

مدونتي: C++ Tips and Tricks

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…