Java Program za provjeru prostih brojeva s primjerom

⚡ Pametni sažetak

Java Program za provjeru prostih brojeva pokazuje kako se jedan cijeli broj provjerava na djeljivost i klasificira kao prost ili složen. Ovaj članak pokriva matematičku definiciju, logiku petlje, potpuni kod koji se može izvesti, optimizaciju kvadratnog korijena, usporedbu složenosti i česte početničke pogreške.

  • 🔢 Pravilo definicije: Prost broj je prirodni broj veći od 1 koji ima točno dva djelitelja, i to 1 i sam broj.
  • 🔁 Logika petlje: Podijelite kandidata sa svakim cijelim brojem od 2 do polovice broja i zabilježite je li bilo koji ostatak jednak nuli.
  • 🚩 Uzorak zastave: Booleova varijabla pohranjuje presudu, a naredba break izlazi iz petlje u trenutku kada se pronađe djelitelj.
  • √ Optimizacija kvadratnog korijena: Testiranje djelitelja samo do drugog korijena smanjuje broj iteracija s n/2 na √n bez promjene rezultata.
  • ⚠️ Rubna kućišta: Nula, jedan i negativne vrijednosti nikada nisu prosti brojevi, dok je 2 jedini paran prosti broj.
  • 🇧🇷 Usporedba složenosti: Osnovna petlja se izvršava u vremenu O(n), a metoda kvadratnog korijena u O(√n).
  • 🧪 Praksa verifikacije: Testirajte s 1, 2, 9, 17 i 97 kako biste potvrdili svaki granični uvjet.

Java Program za provjeru prostih brojeva

Što je prosti broj?

Prost broj je prirodni broj veći od 1 koji je djeljiv samo s 1 ili samim sobom. Na primjer, 11 je djeljiv samo s 1 ili samim sobom. Ostali prosti brojevi su 2, 3, 5, 7, 11, 13, 17, a niz se nastavlja beskonačno.

Broj veći od 1 koji nije prost naziva se složeni broj jer se može sastaviti od manjih faktora. Vrijednost 9 je složena jer se dijeli s 3, a 15 je složena jer se dijeli s 3 i 5.

Bilješka: 0 i 1 nisu prosti brojevi. 2 je jedini paran prosti broj, a negativne vrijednosti se nikada ne smatraju prostim brojevima.

Kako provjeriti je li broj prost u Java

Strategija provjere je jednostavan test djeljivosti. Uzmite kandidatsku vrijednost, podijelite je redom sa svakim manjim cijelim brojem i provjerite ostatak koji vraća operator modula. Ostatak nula dokazuje da djelitelj postoji, što odmah diskvalificira broj.

Programska logika:

  • Moramo podijeliti ulazni broj, recimo 17, s vrijednostima od 2 do 17 i provjeriti ostatak. Ako je ostatak 0, broj nije prost.
  • Nijedan broj nije djeljiv s više od polovine samog sebe. Dakle, trebamo petlja kroz samo numberToCheck/2Ako je ulaz 17, polovica je 8.5 i petlja će iterirati kroz vrijednosti od 2 do 8.
  • Ako je brojZaProvjeru potpuno djeljiv s drugim brojem, zastavica jePrim se postavlja na false i izašlo se iz petlje.

Dva Java Značajke nose cijeli algoritam. Operator modula % vraća ostatak cjelobrojnog dijeljenja, a break Naredba zaustavlja petlju čim je odgovor poznat, tako da se ne izvršavaju nepotrebne iteracije.

Java Program za provjeru je li broj prost ili ne

Program u nastavku dodjeljuje vrijednost 17 varijabli numberToCheck i ispisuje svaki korak dijeljenja, tako da možete pratiti zaključivanje redak po redak. Kod se može uređivati, stoga promijenite vrijednost i ponovno ga pokrenite sa složenim brojem kao što je 21 kako biste vidjeli suprotan ishod.

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");
    }
  }

Očekivani rezultat:

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

Petlja se zaustavlja na 8 jer 17 podijeljeno s 2 daje 8 u cjelobrojnoj aritmetici. Budući da nijedan ostatak nikada nije bio nula, zastavica isPrime zadržava svoju početnu vrijednost true, a konačni uvjet ispisuje pozitivnu presudu.

Optimizirana provjera prostih brojeva metodom kvadratnog korijena

Dijeljenje do polovice broja je ispravno, ali rasipno. Ako broj n ima djelitelj veći od svog kvadratnog korijena, odgovarajući sudjelitelj mora biti manji od kvadratnog korijena, tako da bi već bio otkriven. Provjera do √n stoga daje isti odgovor s puno manje iteracija.

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));
        }
    }
}

Izlaz:

1 is prime: false
2 is prime: true
9 is prime: false
17 is prime: true
97 is prime: true

Stanje i * i <= n izbjegava poziv funkcije Math.sqrt s pomičnim zarezom, a korak 2 preskače svaki parni djelitelj. Za vrijednost kao što je 1,000,003 osnovna petlja izvodi otprilike 500,000 iteracija, dok ova verzija izvodi manje od 500.

Provjera prostog broja koji je unio korisnik

Tvrdo kodirani unos je prikladan za demonstracije, no stvarne vježbe obično zahtijevaju unos s tipkovnice. Klasa Scanner čita cijeli broj iz konzole i prosljeđuje ga istoj metodi isPrime.

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();
    }
}

Uzorak:

Enter a number: 29
29 is a Prime number

💡 Savjet: Inicijalizacija zastavice s number > 1 obrađuje vrijednosti 0, 1 i svaki negativni ulaz u jednom izrazu, što uklanja potrebu za zasebnom zaštitnom klauzulom.

Uobičajene pogreške pri pisanju programa za proste brojeve

Većina netočnih slanja ne uspijeva na graničnim vrijednostima, a ne u glavnoj petlji. Donji popis pokriva pogreške koje se najčešće pojavljuju u početničkom kodu.

  1. Pokretanje petlje od 1: Svaki cijeli broj se dijeli s 1, pa se zastavica odmah postavlja na false i program izvještava da nijedan broj nije prost.
  2. Tretiranje 1 kao prostog broja: Vrijednost 1 ima samo jednog djelitelja, stoga ne zadovoljava definiciju dva djelitelja i mora vratiti false.
  3. Izostavljanjem naredbe break: Program i dalje vraća točan odgovor, ali nastavlja s iteracijama nakon što je presuda poznata, što gubi vrijeme na velike ulazne podatke.
  4. Korištenje i <= n kao granica: Broj se uvijek dijeli sa samim sobom, pa se petlja mora zaustaviti prije nego što se dođe do n.
  5. Usporedba s = umjesto ==: Jedan znak jednakosti dodjeljuje vrijednost umjesto da je provjerava, što stvara grešku prilikom kompajliranja u if uvjetu.

Usporedba metoda provjere primarnih vrijednosti

Odaberite metodu koja odgovara veličini ulaza i treba li testirati jednu vrijednost ili cijeli raspon.

način Testirani raspon djelitelja Složenost vremena Najbolje za
Osnovna petlja 2 do n-1 O (n) Učenje osnovne logike
Polovinska divizija 2 do n/2 O (n) Mali unosi, jednostavan kod
Metoda kvadratnog korijena 2 do √n O(√n) Pojedinačne velike vrijednosti
Sita Eratostena Unaprijed izračunata tablica O(n log log n) Navođenje svih prostih brojeva u rasponu

Kada se mora klasificirati cijeli raspon, a ne samo jedna vrijednost, sito je daleko učinkovitije. Naš prateći program za pronalaženje Glavni Numbers od 1 da 100 pokazuje taj obrazac. Za povezane vježbe vođene petljama, pregledajte Fibonaccijev niz u Java je Java palindromski program, A Bubble Algoritam sortiranja u JavaPočetnici kojima je potrebno osvježenje znanja o deklariranju zastavice i brojača trebali bi pročitati o Java varijable u glavnom Java udžbenik.

Pitanja i odgovori

Ne. Broj 1 ima samo jednog djelitelja, pa ne ispunjava definiciju dva djelitelja. Svaki ispravan program mora vratiti false za 1, za 0 i za svaki negativni cijeli broj.

Djelitelji se javljaju u parovima. Ako postoji faktor veći od kvadratnog korijena, njegov partner je manji od kvadratnog korijena i već je testiran, tako da nisu potrebne dodatne provjere.

Da. Promijenite tip parametra iz int u long i zadržite istu logiku. Za vrijednosti veće od 64 bita, koristite BigInteger i njegovu metodu isProbablePrime umjesto probnog dijeljenja.

Da. Deklariraj brojač prije petlje, stavi isti uvjet u zaglavlje while i povećaj brojač unutar tijela petlje. Izlaz ostaje identičan.

Obično da, iako generirani kod često izostavlja zaštitnik za 0, 1 i negativne ulaze. Uvijek sami provedite granične testove prije prihvaćanja implementacije napisane umjetnom inteligencijom.

Prosti brojevi podupiru funkcije hashiranja, generiranje slučajnih brojeva i RSA enkripciju koja štiti API-je modela i pohranjene skupove podataka. Veličine hash tablica često se biraju kao prosti brojevi za ravnomjernu raspodjelu ključeva.

Sažmite ovu objavu uz: