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: