Ich bin nur ein Anfänger in Java. Ich habe versucht, einen Primzahlprüfer mit dem zu bauen, was ich bereits kenne. Ich habe eine Methode verwendet, die die Quadratwurzel der gegebenen Zahl findet und dann die Zahl mit allen ganzen Zahlen kleiner als diese Wurzel teilt, und wenn in jedem Fall die Antwort "0" ist, dann ist die Zahl keine Primzahl; ansonsten ist es so.Primzahl-Checker mit Java
Mein Programm funktioniert gut mit Integer-Datentyp bis zu no.2147483647 aber nach dieser Nummer für jede Zahl gibt es die gleiche Leistung wie -> „Ja !! Die Zahl ist eine Primzahl“. Aus diesem Grund habe ich versucht, double-Datentyp zu verwenden, aber das Ergebnis ist immer noch das gleiche! Für jede Zahl nach 2147483647 heißt es, es ist eine Primzahl.
Frage: nach Math.floor()
und double
verwenden, eine größere abgerundet Nummer zu speichern, wenn ich meine drucken ArrayList
es zeigt Element „0“ drin, aber das in Endergebnisses Zustand if (contains(0) == true)
umgangen wird und if (contains (0) == false)
ist für Zahlen implementiert mehr als 2147483647
Erste-Code mit dem Integer
Datentyp:
import java.util.ArrayList;
import java.util.Scanner;
public class UltimatePrime {
public static void main (String[] args)
{
int mod;
Scanner input = new Scanner(System.in);
int number = (int) input.nextDouble(); //separate and get only integer part from the input
if (number >= 2 && number < 2147483647) //2147483647 is the limit for data type Integer
{
int j = (int) Math.sqrt(number); //get the integer square root of the input and assign it to j
ArrayList modStorage = new ArrayList();
for (; j>1; j--)
{
mod = number % j; //divide the number with all numbers less than or equal to j
modStorage.add(mod); //store all modulus or remainder operator results in ArrayList modStorage
}
if (modStorage.contains(0) == true) //if ArrayList modStorage contains 0 remainder than result = true
{
System.out.println("Sorry" + ", " + number + " " + "is not a prime number.");
}
if (modStorage.contains(0) == false) //if ArrayList modStorage doesn't contain 0 remainder than result = false
{
System.out.println("Yes!!" + " " + number + " " + "is a prime number.");
}
}
else if (number == 1) //special case for number 1
{
System.out.println("A prime number has only two factors: 1 and itself."
+ "\nA composite number has more than two factors."
+ "\nThe number 1 is neither prime nor composite.");
}
else //insuarace :D
{
System.out.println("Please enter proper number!");
}
input.close();
}
}
Second-Code mit double
:
import java.util.ArrayList;
import java.util.Scanner;
public class FinalPrime {
public static void main (String[] args)
{
double mod;
Scanner input = new Scanner(System.in);
double number = input.nextDouble(); //separate and get only integer part from the input
number = Math.floor(number);
if (number >= 2)
{
double j = Math.sqrt(number); //get the integer square root of the input and assign it to j
j = Math.floor(j);
ArrayList modStorage = new ArrayList();
for (; j>1; j--)
{
mod = number % j; //divide the number with all numbers less than or equal to j
modStorage.add(mod); //store all modulus or remainder operator results in ArrayList modStorage
}
if (modStorage.contains(0) == true) //if ArrayList modStorage contains 0 remainder than result = true
{
System.out.printf("%.0f \n",number);
System.out.println("Sorry" + ", " + "it is not a prime number.");
}
if (modStorage.contains(0) == false) //if ArrayList modStorage doesn't contain 0 remainder than result = false
{
System.out.printf("%.0f \n",number);
System.out.println("Yes!!" + ", " + "it is a prime number.");
}
}
else if (number == 1) //special case for number 1
{
System.out.println("A prime number has only two factors: 1 and itself."
+ "\nA composite number has more than two factors."
+ "\nThe number 1 is neither prime nor composite.");
}
else //insuarace :D
{
System.out.println("Please enter proper number!");
}
input.close();
}
}
Sie können long oder BigInteger verwenden, wenn Ihre Methode für große Zahlen benötigt wird. – Eran
Wenn meine Antwort unten Ihnen geholfen hat, markieren Sie bitte die Lösung – xenteros