مفهوم الأعداد الأولية
يشير الرقم الأولي، المعروف أيضًا باسم العدد الأولي، إلى رقم طبيعي أكبر من 1 غير قابل للقسمة على أرقام طبيعية أخرى باستثناء 1 والعدد الصحيح نفسه (يمكن تعريفه أيضًا على أنه رقم له عاملين فقط: 1 ونفسه ).
أصغر عدد أولي هو 2، وهو أيضًا الرقم الزوجي الوحيد بين الأعداد الأولية؛ والأعداد الأولية الأخرى كلها أرقام فردية. هناك عدد لا نهائي من الأعداد الأولية، لذلك لا يوجد عدد أولي أكبر.
1: حل حسب التعريف:
وهي أيضًا الطريقة الأغبى وذات الكفاءة المنخفضة:
package test.ms;public class FindPrime { // ابحث عن العدد الأولي بين 1 إلى 1000؛public static void main(String[] args) { printPrime(1000);}public static void printPrime(int n){for(int i = 2; i < n ; i++){int count = 0;for(int j = 2 ; j<=i; j++){if(i%j==0){count++;}if(j==i & count == 1){System.out.print(i+" ");}if(count > 1){break; }}}}}
2: الجذر التربيعي:
package test.ms;public class Prime { public static void main(String[] args) {for(int j = 2; j<1000; j++){if(m(j)){System.out.print(j+" ");}}}منطقية عامة ثابتة m(int num){for(int j = 2; j<=Math.sqrt(num);j++){if(num%j == 0){return خطأ؛}}إرجاع صحيح؛}}
3: ابحث عن الأنماط (مقتطفة من مناقشة المنتدى)
أصغر عدد أولي هو 2، وهو أيضًا الرقم الزوجي الوحيد بين الأعداد الأولية؛ والأعداد الأولية الأخرى كلها أرقام فردية. هناك عدد لا نهائي من الأعداد الأولية، لذلك لا يوجد عدد أولي أكبر.
package test.ms;import java.util.ArrayList;import java.util.List;public class Primes { public static void main(String[] args) { // البحث عن الأعداد الأولية List<Integer> primes = getPrimes(1000); // نتيجة الإخراج for (int i = 0; i < primes.size(); i++) { Integer prime = primes.get(i); System.out.printf("%8d", prime); if (i % 10 == 9) { System.out.println(); } } } /** * ابحث عن جميع الأعداد الأولية داخل n* * @param n Range* *return جميع الأعداد الأولية ضمن n*/ Private static List<Integer> getPrimes(int n) { List<Integer> result = new ArrayList<Integer>(); result.add(2); for (int i = 3; i <= n; i += 2) { if (!divisible(i, result)) { result.add(i); ** * تحديد ما إذا كان n قابلاً للقسمة * * @param n الرقم الذي سيتم الحكم عليه *param primes قائمة تحتوي على أعداد أولية * * @return يُرجع صحيحًا إذا كان n قابلاً للقسمة على أي من الأعداد الأولية. */ public static boolean divisible(int n, List<Integer> primes) { for (Integer prime : primes) { if (n % prime == 0) { return true } } return false }}
الطريقتان الأولى والثانية بسيطة للغاية:
الطريقة الثالثة توضح خصائص الأعداد الأولية: من بين جميع الأعداد الأولية، 2 فقط هو رقم زوجي.
لا يكون العدد أوليًا إذا كان قابلاً للقسمة على الرقم الأولي السابق.