Gyakorlati alapok

Prímszám-e?

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


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