اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر (معدل)

لدينا خوارزمية sieve التي تقوم بإيجاد الأعداد الأولية بتعقيد زمني سريع (يفضل استخدامها)

class SieveOfEratosthenes 
{ 
    void sieveOfEratosthenes(int n) 
    { 
        // إنشاء مصفوفة بوليانية و تهيئتها "prime[0..n]" 
        // true نفرض جميع الأعداد أولية عن طريق إعطاء القيمة  
        // في حال كان مضاعفا لعدد آخر false كل عدد سنضع قيمة 
        boolean prime[] = new boolean[n+1]; 
        for(int i=0;i<n;i++) 
            prime[i] = true; 
          
        for(int p = 2; p*p <=n; p++) 
        { 
            // بدون تغيير فهو عدد أولي i إذا بقيت قيمة العنصر 
            if(prime[p] == true) 
            { 
                // قاسم لها i ,وجعلها غير أولية  i تعديل مضاعفات العدد 
                for(int i = p*p; i <= n; i += p) 
                    prime[i] = false; 
            } 
        } 
          
        // طباعة الأعداد الأولية 
        for(int i = 5; i <= n; i++) // نلاحظ أن الثنائية 3-5 هي أول ثنائية مقبولة فنبدأ من العدد 5 
        { 
            if(prime[i] == true && prime[i-2] == true) // 2 مع العدد الأصغر منه ب  i نختبرالعدد 
                System.out.println( "(" + (i-2) + "," + i + ")" ); 
        } 
    } 
      
    // اختبار الدالة أعلاه 
    public static void main(String args[]) 
    { 
        int n = 100; 
        System.out.print("Following are the prime numbers "); 
        System.out.println("smaller than or equal to " + n); 
        SieveOfEratosthenes g = new SieveOfEratosthenes(); 
        g.sieveOfEratosthenes(n); 
    } 
}

 

تم التعديل في بواسطة Wael Aljamal
  • 0
نشر

أهلا بك،

يمكن تنفيذ المطلوب بالشكل التالي:

public class MyClass{
    
  	// دالة لمعرفة ما إذا كان الرقم أولي
    static boolean isPrime(int n) 
    { 
      	// إذا كان الرقم أصغر من 1 فهو غير أولي لأن الأعداد الأولية تبدأ من 2
        if (n <= 1) 
            return false; 
  
      	// نقوم بالمرور على جميع الأعداد الأصغر من الرقم المراد التحقق منه
        for (int i = 2; i < n; i++) 
          	// إذا كان هنالك عدد أصغر يقبل القسمة على الرقم المتحقق منه فهو غير أولي
            if (n % i == 0) 
                return false; 
  		// إذا قمنا بتجاوز جميع الحالات فهذا يعني أن العدد أولي
        return true; 
    } 

     public static void main(String []args){
       	 // حلقة للمرور على جميع الأعداد بين 2 و 100
         for(int i = 2; i < 100; i++){
           	// إذا كان العدد الحالي أولي والعدد الذي يليه بمنزلتين أولي أيضا نقوم بطباعتهما
            if(isPrime(i) && isPrime(i + 2)){
                System.out.println("(" + i + "," + (i + 2) + ")");
            }
         }
     }
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...