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

...برنامج طباعة أعداد أولية

بدأه الآميـرهـ في 29 سبتمبر 2012 · 4 رد · 1,506 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

شكرا لجهودكم و أتمنى مساعدتي في هذا البرنامج"

Write a program that finds all of the prime numbers between 2 and 100

أعلم أن العدد الأولي هو الذي لايقبل القسمة الا على نفسه و على الرقم 1 إضافة أن الباقي يساوي صفر

جربت هنا:

using System;

class Prime
{
    static void Main()
        {
            for(i=2;i<100;i++)
            {
                if(i/2!=0)&(i/3!=0)&(i/4!=0)&(i/5!=0)&(i/6!=0)&(i/7!=0)&(i/8!=0)&(i/9!=0);
                Console.WriteLine("\n"+i);
            }
        }
}

بانتظار دعمكم =)

#2

السلام عليكم:

استبدلي الكود الذي كتبتيه بهذا :

            int i, j;
            Console.WriteLine("prime no between 1 to 100");
            for (i = 2; i <= 100; i++)
            {
                int count = 0;
                for (j = 1; j <= i; j++)
                {

                    if (i % j == 0)
                    { count = count + 1; }
                }

                if (count <= 2)
                { Console.WriteLine(i); }


            }
            Console.ReadKey();

هذا فعال بإذن الله وقد جربته أنا.

#3

الحل الذي قدمه الأخ أنس -جزاه الله خيرا - هو صحيح لأنه يطبق التحقق وفق القاعدة العامة لتعريف العدد الأولي من أنه لا يقبل القسمة على أي عدد غير نفسه والواحد

ولكن من حيث الحل الفعال وخاصة من أجل الأعداد الكبيرة فنستطيع تحسين خوارزمية التحقق على الشكل التالي :

المثال بـالسي شارب كونسول C#

using System;

namespace Primes
{
	class Program
	{
    	static void Main(string[] args)
    	{
        	Console.WriteLine("1");
        	Console.WriteLine("2");

        	for (int i = 3; i < 100 ; i++)
        	{
            	int sq = (int)Math.Sqrt(i);
            	int j;
            	for (j = sq + 1; j > 1; j--)
            	{
                	if (i % j == 0)
                    	break;
            	}
            	if (j == 1)
                	Console.WriteLine(i.ToString());
        	}
        	Console.ReadKey();
    	}
	}
}

حيث عند تجريب القسمة يكفي أن نجرب على الأعداد الواقعة بين الاثنان و الجذر التربيعي للعدد المفحوص وذلك أنه في حال لم نجد قاسم ضمن هذا المجال فمستحيل أن يكون هناك قاسم أكبر من الجذر لأن العدد غير الأولي هو إما يقسم جذره أو أنه ناتج عن جداء قاسمين أحدهما أقل من الجذر والآخر أكبر من الجذر ولهذا يكفي البحث في أحد النصفين

من جهة أخرى لا يحتاج التحقق من قسمته على واحد ولهذا نجعله شرط إنهاء الحلقة الداخلية أي نبدء الفحص من الجذر نزولا حتى الاثنان ثم نخرج من الحلقة

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

في حال كان المتحول j واحد فهذا يعني أنه لم يجد أي قاسم وخرج من الحلقة طبيعيا إذا فالعدد هو أولي

أما إن لم يكن واحد فهذا يعني أنه قد خرج من الحلقة قبل الوصول إلى شرط النهاية أي خرج بكسر الحلقة نتيجة وجود قاسم أي أنه ليس أوليا

طبعت الرقم واحد واثنان ابتداء لأنهما لا يخضعان لعملية التحقق ولا داعي لوضع اشتراطات إضافية لأننا نعلم مسبقا أنهما أوليان

بالنسبة لسؤالك يمكن حذف السطرين لأن المطلوب في السؤال الأعداد المحصورة بين اثنان و مائة أي الاثنان والمائة غير مطلوبين

أما إذا كان المقصود أنهما ضمن المجال فيجب تعديل شرط الحلقة الخارجية لتصبح أصغر أو يساوي 100 لتدخل الفحص

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 30 سبتمبر 2012 في 00:41

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#4

السلام عليكم

حاولت فى الكود ده كتيير ولكن واضح ان الاخوه سبقونى

ودى محاولتى علشان مش تكون ظاعت على الفاضى لعل احد يستفاد منها

       
    int prime = 0;
            for (int x = 0; x <= 100; x++)
            {
                prime = 1;
                for (int i = 2; i <= x - 1; i++)
                {
                    if (x % i == 0)
                    {
                        prime = 0;
                    }
                }
                if (prime == 1)
                {
                    Console.WriteLine(x);
                }
            }
            Console.ReadLine();

بالنسبه للاخ أبو أحمد المبرمج

فى البرمجه كل واحد بيحاول يوصل من خلال ادواته

ويتضح لى ان ادواتى ضعيفه جدا بالنسبه لك

مع العلم لازلت مبتدىء فى السى شارب

#5

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

شكرا لكم

و لجهودكم ..

فائق التقدير والامتنآن ؛

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