إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

أقرب عدد أولي لعدد طبيعي

تقليص
هذا الموضوع مغلق.
X
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • أقرب عدد أولي لعدد طبيعي

    السلام عليكم
    وليكن لدينا عددا طبيعيا نريد معرفة
    أقرب عدد أولي لهذا العدد الطبيعي
    أريد برنامجا أو أكوادا تحقق ذلك
    سلامي
    التعديل الأخير تم بواسطة ثامر أبو بلقيس; الساعة 16-08-2013, 03:34 PM. سبب آخر: تم تعديل كلمة أكتب بـ أريد

  • #2
    المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
    أكتب برنامجا أو أكوادا تحقق ذلك
    سلامي
    لم أفهم ؟؟
    هل هذا إستفسار ؟؟ أم إختبار ؟؟
    عادة لا يكون الإستفسار بصيغة الأمر
    و طلبك لكود أو (برنامج) لا يوحى بالإستفسار

    عموما لم توضح الرقم الأولى المطلوب أكبر من رقم الأساس أم أصغر

    فى المرات القادمة عندما لا يكون الغرض هو الإستفسار
    يمكنك وضع العنوان بهذه الصيغة
    تمرين :: "عنوان الموضوع"

    مسموح بعمل التمارين فى هذا القسم مؤقتا
    لحين فصلها فى الوقت المناسب لقسم مستقل

    تعليق


    • #3
      هل تقصد مثل هذا ؟؟


      يمكنك إنجاز البرنامج بواسطة الإضافة is_prim

      تجدها هنا
      http://sites.ienajah.com/vb2/showthread.php?t=27094

      تلميح
      الأعداد الأولية ذات القيمة الأكبر من رقم الأساس تحسب بحلقة Repeat
      أما الأعداد الأولية ذات القيمة الأصغر من رقم الأساس تحسب بحلقة For

      تعليق


      • #4
        شكرا إليك بهذا الكود للإطلاع و التصحيح
        كود:
        function belkiss (x)
         numbers = {}
        for i = 2, x do
            numbers[i] = i;
        end
         for i = 2, x do
            for j = i+1, x do
                if numbers[j] ~= 0 and Math.Mod(j, i) == 0 then numbers[j] = 0 end
            end
        end
        max_prime_left, max_prime_right = 2, 2
        for i = 2, x do
            if numbers[i] ~= 0 then 
                local is_prime = true
         
                local l = math.floor( i / 10 )
                while l > 1 do
                    if numbers[l] == 0 then
                        is_prime = false
                        break 
                    end
                    l = math.floor( l / 10 )
                end
                if is_prime then
                    max_prime_left = i
                end
                 is_prime = true
                local n = 10;
                while math.floor(Math.Mod(i, 10) ) ~= 0 and n < x do
                    if numbers[ math.floor( Math.Mod(i, 10) ) ] ~= 0 then
                        is_prime = false
                        break
                    end
                    n = n * 10
                end    
                if is_prime then
                    max_prime_right = i
                end
            end
        end
        end

        تعليق


        • #5
          ما كل هذا الحلقات أخى ؟؟ أنت تستخدم إضافة و لا داعى لكل هذه الأكواد
          و لماذا رجعت مرة أخرى للدالة فلور ؟؟
          عموما ضع لنا كود إستغلال هذه الدالة ليتم مراجعتها (ضع كود زر الإستغلال)

          الحل المقدم منى لك

          لكل رقم طبيعى رقم أولى يسبقه و رقم أولى يليه
          سأعطيك كود إحضار أقرب رقم أولى يلى الرقم المدخل
          سأعطيك كود الزر Next prim up الموجود فى الصورة بمشاركتى السابقة

          قم بعمل مشروع جديد
          تأكد من وجود الإضافة is_prim

          ضع 2 إنبوت و دعهم بالأسماء الإفتراضية (لا تعدل أسماؤهم)
          ضع زر

          فى إسكربت الزر ضع

          كود PHP:
          Input.GetText("Input1");
          String.ToNumber(x);
          repeat
          x
          =x+1
          prim 
          is_Prime_num(x);
          until prim==true 
          Input
          .SetText("Input2"x); 
          أكتب الرقم فى إنبوت 1
          إضغط الزر
          يظهر الرقم الأولى الأقرب فى إنبوت 2

          منتظر ردك
          و أعتقد أنه بات من السهل إحضار
          أقرب رقم أولى يسبق الرقم المدخل لو إتبعت نفس المنوال لكن بحلقة for

          الكود جاهز لدى

          كذلك كود إحضار الأرقام الأولية المحصورة من x إلى y
          و الذى تم إنتاج المرفق فى هذه المشاركة به فى زمن قدره 3 دقائق

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

          الآن أنا موجود
          غدا
          من يدري ؟؟

          راجع المرفق
          الملفات المرفقة

          تعليق


          • #6
            لمراجعة كود الدالة المرفقة
            أكتب الرقم في الانبوت 1 لتطلع النتائج في الانبوت 2 و الانبوت 3
            كود:
            x=Input.GetText("Input1");
            x = String.ToNumber(x);
            belkiss (x)
            Input.SetText("Input2", max_prime_right);
            Input.SetText("Input3", max_prime_left);
            ====================================
            لقد قمت بتجربة ما أرسلته و فعلا عمل متكامل جربت على أعداد صغيرة و النتائج جد ممتازة في الحصول على العدد الأولى الموالي بارك الله فيك

            تعليق


            • #7
              هل عند التغير في الكود المرسل هنا
              x=x-1
              ساتحصل على الرقم الذي سبق

              تعليق


              • #8
                المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
                لقد قمت بتجربة ما أرسلته و فعلا عمل متكامل جربت على أعداد صغيرة و النتائج جد ممتازة في الحصول على العدد الأولى الموالي بارك الله فيك
                عليك بتجربة الأعداد الكبيرة أيضا
                الكود سريع حتى 11 منزلة
                أى
                الكود سريع (أقل من ثانية ) حتى 99999999999
                بعد ذلك يستغرق بضع ثوانى
                التباطؤ الحقيقى يظهر عند 13 منزلة أى 9999999999999

                لا أعتقد أنك ستصل لهذه المنازل

                لن أتكلم عن الكود خاصتك حتى لا تعتقد أننى أقارن
                فقط ملحوظة

                إعتمد على الكود المقدم منى لضمان السرعة
                نتائج دالتك غير صحيحة و لا أنصحك بالإعتماد عليها
                التعديل الأخير تم بواسطة النصل القاطع; الساعة 17-08-2013, 07:01 PM. سبب آخر: إضافة تنبيه لعدم دقة نتائج الدالة

                تعليق


                • #9
                  المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
                  هل عند التغير في الكود المرسل هنا
                  x=x-1
                  ساتحصل على الرقم الذي سبق
                  لا
                  و سبق و أخبرتك أنك ستقوم بعمل حلقة for
                  و قبل أن تطرح أكوادا معقدة دعنى أوضح لك أن كود الزر كاملا بما فيه إستحضار القيمة و حسابها و إظهارها لن يتجاوز العشرة أسطر
                  فقط دقق فى صياغة حلقة for
                  بالتوفيق

                  تعليق


                  • #10
                    فعلا اعتمدت الكود و الاضافة كحل نهائي
                    لمشكلتي مع الأعداد الأولية
                    يبدأ البطؤ في المنزلة 16 و فعلا لا أحتاج أرقاما كبيرة
                    بارك الله فيك

                    تعليق


                    • #11
                      المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
                      فعلا اعتمدت الكود و الاضافة كحل نهائي
                      لمشكلتي مع الأعداد الأولية
                      يبدأ البطؤ في المنزلة 16 و فعلا لا أحتاج أرقاما كبيرة
                      بارك الله فيك
                      و بارك الله فيك أخى
                      و أنا ذكرت 13 منزلة وفقا لمواصفات جهازى المتوسطة و ليس وفقا لجهازك المتقدم نسبيا عن جهازى
                      لا أعتقد أنك تحتاج للرقم الأولى الأقرب الأدنى
                      الأدنى أم الأعلى كلاهما سيفى بالغرض بالنسبة لك (أنا إستخدمته لنفس الغرض الذى أتوقع أنك تريده لأجله)
                      بالتوفيق

                      تعليق


                      • #12
                        أجدد شكري جزاك الله كل خير ووفقك في كل مساعيك

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة النصل القاطع مشاهدة المشاركة

                          كذلك كود إحضار الأرقام الأولية المحصورة من x إلى y
                          و الذى تم إنتاج المرفق فى هذه المشاركة به فى زمن قدره 3 دقائق

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

                          الآن أنا موجود
                          غدا
                          من يدري ؟؟
                          السلام عليكم أخي خالد بخصوص هذه الجزئية التي أشرت لها
                          حاول استغلال القيم المخزنة
                          كأن تستغل local prime

                          وللقيام بالتجربة لمن يهمه الأمر
                          ازرع الكود التالي تحت زر معين
                          كود:
                          local n =10000
                          local prime = {}
                          local primes = {}
                          
                          for i = 2, n do prime[i] = true end
                          
                          for i = 2, n do
                           if prime[i] then
                             primes[#primes+1] = i
                             for j = i*2, n, i do prime[j] = false end
                           end
                          end
                          
                          
                          Input.SetText("Input1",table.concat(primes, " "));
                          لاحظ أنه تم تحديد استخراج كل الأعداد الأولية إلى غاية 10000 مثلا
                          وضع أنبوت 1 و عاين النتائج
                          هل لك استخراج بطريقة أخرى للاستفادة أكثر
                          سلامي و احترامي

                          تعليق

                          مواضيع تهمك

                          تقليص

                          المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 06-08-2025 الساعة 11:33 PM
                          المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 06-04-2025 الساعة 05:29 PM
                          المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 05-31-2025 الساعة 10:07 PM
                          المنتدى: القسم العام نشرت بواسطة: ماريا عبد الله الوقت: 05-30-2025 الساعة 11:48 PM
                          المنتدى: التصنيع والانتاج نشرت بواسطة: HaMooooDi الوقت: 05-30-2025 الساعة 09:36 AM
                          يعمل...
                          X