Gyakorlati alapok
Prímszám-e?
Prímnek nevezzük azokat a természetes számokat, amelyeknek a természetes számok között kizárólag 2 osztójuk van: egyik önmaguk, a másik az 1. Tehát ezek a számok magukon és az 1-en kívül nem oszthatók más számmal.
Prímszámkeresést bizony nem ússzuk meg iterálás nélkül (for ciklus), hiszen végig kell próbálnunk az összes lehetséges oszthatóságot a keresett számon. A bekérési rutinról már sok szó esett, éppen ezért azt nem analizálom azzal a kivétellel, hogy most a számot a közvetlenül numerikus adatfogadásra képes nextInt() függvénnyel kérjük be.
Deklaráltunk egy klasszikus flag-et, azaz 2 állású állapotváltozót (boolean prim = true;), ennek értékét csakis a prímszám sikertelen megtalálásakor változtatjuk meg false értékre.
A 0 és 1 nem prímszám, ezt már az üdvözlő szövegben feltüntettük, hogy elejét vegyük a további eltévelyedéseknek. Ugyanakkor a 2 prímszám, ezért a feltételt érdemes egy ilyen szerkezetbe sűríteni:
if (szam == 1 || szam == 0)
Az igazi prímáskeresés csak ezután következik a for ciklusban. Az iterálás 2-nél kezdődik (int j = 2;) és a keresett szám négyzetgyökéig tart (Math.sqrt(szam)), mert a keresett szám (szam) más számokkal való oszthatósága eddig a pontig kiderül. Ezen határig az algoritmus azt nézi meg, hogy a szám j változóval osztott maradéka 0-e (if (szam % j == 0)). Ha igen, a keresett szám nem prím, másként az.
import java.util.Scanner;
import java.math.*;
public class Main {
public static void main(String[] args) {
int szam;
boolean prim = true;
Scanner in = new Scanner(System.in);
System.out.println("Kérem, hogy gépelje be a számot (0 és 1
nem prímszám)!");
szam = in.nextInt();
if (szam == 1 || szam == 0){
System.out.println(szam + " nem
prímszám!");
prim = false;
}
else
for (int j = 2; j <= Math.sqrt(szam);
j++){
if (szam % j
== 0){
prim = false;
System.out.println(szam + " nem prímszám!");
break;
}
}
if(prim == true)
System.out.print(szam + " prímszám");
}
}
Végeredmény (például):
Kérem, hogy gépelje be a számot (0 és 1 nem prímszám)!
23
23 prímszám