Java Örnekle birlikte asal sayıları kontrol eden program.
⚡ Akıllı Özet
Java Asal Sayı Kontrolü Programı, tek bir tamsayının bölünebilirliğinin nasıl test edildiğini ve asal veya bileşik olarak nasıl sınıflandırıldığını gösterir. Bu makale, matematiksel tanımı, döngü mantığını, çalıştırılabilir kodun tamamını, karekök optimizasyonunu, karmaşıklık karşılaştırmasını ve yeni başlayanların sık yaptığı hataları kapsamaktadır.

Asal Sayı Nedir?
Asal sayı, 1'den büyük ve yalnızca 1'e veya kendisine bölünebilen doğal sayıdır. Örneğin, 11 yalnızca 1'e veya kendisine bölünebilir. Diğer asal sayılar 2, 3, 5, 7, 11, 13, 17'dir ve bu dizi sonsuza kadar devam eder.
1'den büyük ve asal olmayan sayılara bileşik sayı denir, çünkü bu sayılar daha küçük çarpanlardan oluşabilir. 9 sayısı bileşik sayıdır çünkü 3'e tam bölünür; 15 sayısı da bileşik sayıdır çünkü hem 3'e hem de 5'e tam bölünür.
Not: 0 ve 1 asal sayı değildir. 2 tek çift asal sayıdır ve negatif değerler asla asal sayı olarak kabul edilmez.
Bir sayının asal olup olmadığını nasıl kontrol edersiniz? Java
Doğrulama stratejisi basit bir bölünebilirlik testidir. Aday değeri alın, sırayla her küçük tam sayıya bölün ve modül operatörünün döndürdüğü kalanı inceleyin. Kalanın sıfır olması, bir bölenin var olduğunu kanıtlar ve bu da sayıyı hemen geçersiz kılar.
Programın Mantığı:
- Örneğin 17 sayısını 2 ile 17 arasındaki sayılara bölüp kalanı bulmamız gerekiyor. Eğer kalan 0 ise, sayı asal değildir.
- Hiçbir sayı kendisinin yarısından fazlasına bölünemez. Yani ihtiyacımız var döngü sadece aracılığıyla
numberToCheck/2Giriş değeri 17 ise, yarısı 8.5 olur ve döngü 2'den 8'e kadar olan değerler arasında tekrarlanır. - Eğer numberToCheck başka bir sayıya tam bölünebiliyorsa, isPrime bayrağı sıfıra ayarlanır.
falseve döngüden çıkılır.
İki Java Özellikler tüm algoritmayı taşır. Modül operatörü % Bir tamsayı bölmesinin kalanını döndürür ve break Bu ifade, cevap bilindiği anda döngüyü durdurur, böylece gereksiz yinelemeler gerçekleştirilmez.
Java Bir sayının asal olup olmadığını kontrol eden program.
Aşağıdaki program, numberToCheck değişkenine 17 değerini atar ve her bölme adımını yazdırır, böylece mantığı satır satır takip edebilirsiniz. Kod düzenlenebilir olduğundan, değeri değiştirin ve ters sonucu görmek için 21 gibi bileşik bir sayı ile tekrar çalıştırın.
public class PrimenumberToCheckCheck {
public static void main(String[] args) {
int remainder;
boolean isPrime=true;
int numberToCheck=17; // Enter the number you want to check for prime
//Loop to check whether the number is divisible by any number other than 1 and itself
for(int i=2;i<=numberToCheck/2;i++)
{
//number is divided by i
remainder=numberToCheck%i;
System.out.println(numberToCheck+" Divided by "+ i + " gives a remainder "+remainder);
//if remainder is 0 then the number is not prime and we break the loop. Else continue the loop
if(remainder==0)
{
isPrime=false;
break;
}
}
// Check value true or false, if isPrime is true then the number is prime otherwise not prime
if(isPrime)
System.out.println(numberToCheck + " is a Prime number");
else
System.out.println(numberToCheck + " is not a Prime number");
}
}
Beklenen çıktı:
17 Divided by 2 gives a remainder 1 17 Divided by 3 gives a remainder 2 17 Divided by 4 gives a remainder 1 17 Divided by 5 gives a remainder 2 17 Divided by 6 gives a remainder 5 17 Divided by 7 gives a remainder 3 17 Divided by 8 gives a remainder 1 17 is a Prime number
Döngü 8'de durur çünkü tam sayı aritmetiğinde 17'nin 2'ye bölünmesi 8'e eşittir. Kalan hiçbir zaman sıfır olmadığı için, isPrime bayrağı başlangıçtaki true değerini korur ve son koşul olumlu sonucu yazdırır.
Karekök Yöntemi Kullanılarak Optimize Edilmiş Asal Sayı Kontrolü
Sayının yarısına kadar bölme işlemi doğru olsa da israftır. Eğer bir n sayısının karekökünden büyük bir böleni varsa, eşleşen eş bölen karekökünden küçük olmalıdır, dolayısıyla zaten bulunmuş olurdu. Bu nedenle √n'ye kadar kontrol etmek, çok daha az yinelemeyle aynı sonucu verir.
public class PrimeCheckOptimized { public static boolean isPrime(int n) { // 0, 1 and negative values are never prime if (n <= 1) { return false; } // 2 is the only even prime number if (n == 2) { return true; } if (n % 2 == 0) { return false; } // test only odd divisors up to the square root for (int i = 3; i * i <= n; i += 2) { if (n % i == 0) { return false; } } return true; } public static void main(String[] args) { int[] samples = {1, 2, 9, 17, 97}; for (int value : samples) { System.out.println(value + " is prime: " + isPrime(value)); } } }
Çıktı:
1 is prime: false 2 is prime: true 9 is prime: false 17 is prime: true 97 is prime: true
Kondisyon i * i <= n Bu yöntem, Math.sqrt'ye yapılan kayan noktalı çağrıyı önler ve 2 adımı her çift böleni atlar. 1,000,003 gibi bir değer için temel döngü yaklaşık 500,000 yineleme gerçekleştirirken, bu sürüm 500'den daha az yineleme gerçekleştirir.
Kullanıcı Tarafından Girilen Asal Sayıyı Kontrol Et
Sabit kodlanmış girdi, gösterimler için kullanışlıdır, ancak gerçek egzersizler genellikle klavye girdisi gerektirir. Scanner sınıfı, konsoldan bir tamsayı okur ve bunu aynı isPrime yöntemine iletir.
import java.util.Scanner; public class PrimeCheckUserInput { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("Enter a number: "); int number = sc.nextInt(); boolean isPrime = number > 1; for (int i = 2; i * i <= number; i++) { if (number % i == 0) { isPrime = false; break; } } System.out.println(number + (isPrime ? " is a Prime number" : " is not a Prime number")); sc.close(); } }
Örnek Çalıştırma:
Enter a number: 29 29 is a Prime number
💡 İpucu: Bayrağı şu şekilde başlatmak: number > 1 0, 1 ve tüm negatif giriş değerlerini tek bir ifadede ele alır, bu da ayrı bir koruma koşuluna olan ihtiyacı ortadan kaldırır.
Asal Sayı Programı Yazarken Yapılan Sık Hatalar
Çoğu hatalı gönderim, ana döngüden ziyade sınır değerlerinde başarısız olur. Aşağıdaki liste, yeni başlayanlar için yazılmış kodlarda en sık görülen hataları kapsamaktadır.
- Döngüyü 1'den başlatıyoruz: Her tam sayı 1'e bölünebildiğinden, bayrak hemen false olarak ayarlanır ve program hiçbir sayının asal olmadığını bildirir.
- 1'i asal sayı olarak kabul etmek: 1 değerinin yalnızca bir böleni vardır, bu nedenle iki bölenli tanımına uymadığı için false döndürmelidir.
- Kesme ifadesini atlamak: Program hala doğru cevabı veriyor, ancak sonuç belli olduktan sonra da döngüye devam ediyor, bu da büyük veri kümelerinde zaman kaybına neden oluyor.
- kullanma
i <= nSınır olarak: Sayı her zaman kendisini böler, bu nedenle döngü n'ye ulaşmadan önce durmalıdır. - İle kıyaslama
=yerine==: Tek bir eşittir işareti, bir değeri test etmek yerine atar; bu da if koşulunda derleme zamanı hatasına neden olur.
Asal Sayıyı Kontrol Etme Yöntemlerinin Karşılaştırılması
Girişin boyutuna ve tek bir değerin mi yoksa tüm bir aralığın mı test edilmesi gerektiğine uygun yöntemi seçin.
| Yöntem | Bölücü Aralığı Test Edildi | Zaman Karmaşıklığı | En Uygun |
|---|---|---|---|
| Temel döngü | 2 ile n-1 | O (n) | Temel mantığı öğrenmek |
| Yarı bölüm | 2'den n/2'ye | O (n) | Küçük girdiler, basit kod |
| Karekök yöntemi | 2'den √n'ye | O(√n) | Tek büyük değerler |
| Eratosthenes Elekleri | Önceden hesaplanmış tablo | O(n log log n) | Bir aralıktaki tüm asal sayıları listelemek |
Tek bir değer yerine tüm bir aralığın sınıflandırılması gerektiğinde, elek yöntemi çok daha verimlidir. Bulma işlemi için yardımcı programımız asal Numbers 1 gelen 100 için Bu, söz konusu örüntüyü göstermektedir. Döngü tabanlı ilgili alıştırmalar için, aşağıdaki bölüme bakın. Fibonacci serisi Java, Java palindrom programı, Ve Bubble Sıralama algoritması JavaBayrak ve karşı hamle bildirme konusunda bilgilerini tazelemek isteyen yeni başlayanlar aşağıdaki yazıyı okumalıdır. Java değişkenler esasta Java öğretici.
