Primzahlen
-
Hi,
ich soll ein primzahl programm in java schreiben. das ist ja weiter nicht so das ding. aber es dürfen dabei weder arrays noch das Sieb des ... verwendet werden. hab mir jetzt überlegt das über eine boolsche variable zu lösen.
kann mir jemand sagen ob der weg möglich ist bzw mir einen ansatz geben wie das am besten sonst zu lösen wäre.
danke!
PS: Die Forensuche habe ich verwendet!!!
-
OK, das ist jetzt C-Code, aber Java dürfte ähnlich funktionieren:
bool prim=true; for(int i=3;i<sqrt(n);i+=2) if(n%i==0) {prim=false;break;} cout << n << " ist " << prim?"Primzahl":"zusammengesetzte Zahl" << endl;
-
So was ähnliches habe ich auch!
Wie verarbeite ich es denn, dass ich die Obere und Unteregrenze der Zahlen doie Überprüft werden sollen noch einlesen soll.
-
Wie die Eingabe in Java realisiert wird, weiß ich nicht mehr so genau. Aber du kannst ja den obigen Block in eine Schleife "for(n=uGrenze;n<=oGrenze;++n)" setzen.
-
Hi
Oder schau dir BigInteger an. Die haben bereits die Methode isProbablePrime() impelmentiert. wird aber wohl nicht das sein, was du verwenden darfst. Auserdem ist BigInteger für richtig grosse zahlen gedacht.
gruss Termite
-
BigInteger fuer Primzahlenrechnungen zu verwenden ist das gleiche wie heute schlafen gehn, in 100 Jahren aufstehn und das selbe Programm in c zu schreiben!
Ist viel zu langsam!!!! Schon bei kleinen Zahlen wird das extrem aufwendig.
Fuer die Eingabe in Java verwendet man
System.in
oder man kann auch
JOptionPane (Wenns ein wenig Graphisch sein darf)
verwenden.
-
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Prim extends JFrame implements ActionListener { private int untergrenze = 3; private int obergrenze = 5000; private JTextField ut = new JTextField(8); private JTextField ot = new JTextField(8); private JTextArea area = new JTextArea(); Prim() { JPanel content = (JPanel)getContentPane(); JScrollPane scroll = new JScrollPane(area); JPanel pan = new JPanel(); JLabel ul = new JLabel("Untere Grenze:"); JLabel ol = new JLabel("Obere Grenze:"); ut.setText(""+untergrenze); ot.setText(""+obergrenze); JButton apply = new JButton("starten"); apply.addActionListener(this); pan.add(ul); pan.add(ut); pan.add(ol); pan.add(ot); pan.add(apply); content.setLayout(new BorderLayout()); content.add(pan, BorderLayout.NORTH); content.add(scroll); setVisible(true); } public boolean isPrime(int n) { boolean prim=true; for(int i=2;i <= Math.sqrt(n); ++i) { if(n%i==0) { prim=false; break; } } return prim; } public void actionPerformed(ActionEvent evt) { untergrenze = Integer.parseInt(ut.getText()); obergrenze = Integer.parseInt(ot.getText()); area.setText(""); for(int i = untergrenze; i <= obergrenze; ++i) { area.append(""+i+ " : "); if(isPrime(i)) { area.append(" ist prim\n"); } else { area.append(" ist nicht prim\n"); } } } public static void main(String args[]){ Prim p = new Prim(); p.setLocation(100, 100); p.setSize(600, 400); p.setDefaultCloseOperation(EXIT_ON_CLOSE); p.setVisible(true); } }
-
Da sieht man mal wieder, wie ein 4-zeiliges C++-Programm von dem Java-Kram total aufgebläht wird.
-
Die 4 Zeilen sind erstens kein vollständiges Programm und zweitens ist da auch keine graphische Benutzeroberfläche wie in diesem Java-Programm enthalten!
-
Stimm, aber in C++ benötigt man auch keine Grafik, um was auszutesten
btw, die isPrime-Funktion könnte noch gekürzt werden:
public boolean isPrime(int n) { for(int i=2;i <= Math.sqrt(n); ++i) if(n%i==0) return false; return true; }
-
Um dasselbe in Java zu machen braucht es gerade mal eine Zeile mehr, als in C++. Von aufblähen kann dann gar keine Rede sein. Wenn man allerdings Äpfel mit Birnen vergleicht ...
-
Stimm, aber in C++ benötigt man auch keine Grafik, um was auszutesten
voll trollig, denkst in Java braucht man eine GUI um was zu testen ?
-
Wer hat denn angefangen, um meinen Codeschnipsel ein "komplettes" Java-Prog drumrumzucoden?
-
Die vorgestellten Codeschnipsel sind aus meiner Sicht nicht korrekt.
0 und 1 sind keine Primzahlen und es gibt ja auch negative Primzahlen!Eine bereinigte Version mit grafischer Programmoberfläche und Eingabeüberprüfung:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Primzahl implements ActionListener { JFrame primFrame; JPanel primPanel, inPanel; JTextField number; JLabel primLabel; JButton testNumber; public Primzahl() { // Erzeugung und Einstellung des Frame primFrame = new JFrame( "Primzahltest" ); primFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); primFrame.setSize( new Dimension( 200, 150 ) ); // Erzeugung und Einstellung des Fensterpanel primPanel = new JPanel( new BorderLayout() ); primPanel.setBorder( BorderFactory.createEmptyBorder( 5, 5, 5, 5 ) ); // Erzeugung und Einstellung des Eingabepanel inPanel = new JPanel( new BorderLayout() ); inPanel.setBorder( BorderFactory.createEmptyBorder( 0, 0, 5, 0 ) ); // Erzeugung und Einstellung der Elemente des Fensterinhalt number = new JTextField( 2 ); primLabel = new JLabel( "", SwingConstants.CENTER ); testNumber = new JButton( "OK" ); // Erzeugung einer Ereignisüberwachung auf den OK-Button testNumber.addActionListener( this ); // Hinzufügung der Elemente zum Eingabepanel inPanel.add( number, BorderLayout.CENTER ); inPanel.add( testNumber, BorderLayout.EAST ); // Hinzufügung der Elemente zum Fensterpanel primPanel.add( inPanel, BorderLayout.NORTH ); primPanel.add( primLabel, BorderLayout.CENTER ); // Hinzufügung des Fensterpanel zum Frame primFrame.getContentPane().add( primPanel, BorderLayout.CENTER ); // Setzen des voreingestellten Button primFrame.getRootPane().setDefaultButton( testNumber ); // Sichtbarmachung des Frame primFrame.setVisible( true ); } public void actionPerformed( ActionEvent event ) { Integer n = 0; boolean eingabe = true; primLabel.setBorder( BorderFactory.createTitledBorder( "Auswertungsergebnis" ) ); try { // Eingabedaten auslesen n = Integer.parseInt( number.getText() ); } catch (NumberFormatException e) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>keine Ganzzahl</font></u></html>" ); eingabe = false; } if ( eingabe ) { // auf Primzahl testen if ( isPrim( n ) ) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=green>eine Primzahl</font></u></html>" ); } else { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>keine Primzahl</font></u></html>" ); } } } /** * Testet auf eine Primzahl. */ public static boolean isPrim( Integer n ) { boolean ergebnis = true; for( int i = 2; i <= Math.sqrt( Math.abs( n ) ); ++i ) { if ( n % i == 0 ) { ergebnis = false; break; } } if ( n == 0 || n == 1 ) { ergebnis = false; } return ergebnis; } /** * Erzeugt die Programmoberfläche und bringt sie auf das Bild. * Für die Thread-Sicherheit sollte diese Methode aus dem * Ereignisabfertigungs-Thread aufgerufen werden. */ public static void createAndShowGUI() { // Nutzung der voreingestellten Fenster-Dekoration JFrame.setDefaultLookAndFeelDecorated( true ); Primzahl prim = new Primzahl(); } public static void main( String[] args ) { // Aufgabe für den Ereignisabfertigungs-Thread: // Erzeugen und Anzeigen der Programmoberfläche javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } } ); } }
-
A schrieb:
es gibt ja auch negative Primzahlen!
Nein. Alle Primzahlen sind >= 2.
-
Was für ein Schwachsinn.
-
A schrieb:
Was für ein Schwachsinn.
http://en.wikipedia.org/wiki/Prime_number
In mathematics, a prime number (or prime) is a natural number greater than one whose only positive divisors are one and itself.
-
Jaja, du hast Recht. :p Schwarz auf weiß.
Geht auch in deutsch: http://de.wikipedia.org/wiki/Primzahlen
-
So, jetzt dürfte es korrekt sein.
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Primelement implements ActionListener { JFrame primFrame; JPanel primPanel, inPanel; JTextField number; JLabel primLabel; JButton testNumber; public Primelement() { // Erzeugung und Einstellung des Frame primFrame = new JFrame( "Primelement" ); primFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); primFrame.setSize( new Dimension( 200, 150 ) ); // Erzeugung und Einstellung des Fensterpanel primPanel = new JPanel( new BorderLayout() ); primPanel.setBorder( BorderFactory.createEmptyBorder( 5, 5, 5, 5 ) ); // Erzeugung und Einstellung des Eingabepanel inPanel = new JPanel( new BorderLayout() ); inPanel.setBorder( BorderFactory.createEmptyBorder( 0, 0, 5, 0 ) ); // Erzeugung und Einstellung der Elemente des Fensterinhalt number = new JTextField( 2 ); primLabel = new JLabel( "", SwingConstants.CENTER ); testNumber = new JButton( "OK" ); // Erzeugung einer Ereignisüberwachung auf den OK-Button testNumber.addActionListener( this ); // Hinzufügung der Elemente zum Eingabepanel inPanel.add( number, BorderLayout.CENTER ); inPanel.add( testNumber, BorderLayout.EAST ); // Hinzufügung der Elemente zum Fensterpanel primPanel.add( inPanel, BorderLayout.NORTH ); primPanel.add( primLabel, BorderLayout.CENTER ); // Hinzufügung des Fensterpanel zum Frame primFrame.getContentPane().add( primPanel, BorderLayout.CENTER ); // Setzen des voreingestellten Button primFrame.getRootPane().setDefaultButton( testNumber ); // Sichtbarmachung des Frame primFrame.setVisible( true ); } public void actionPerformed( ActionEvent event ) { Integer n = 0; boolean eingabe = true; primLabel.setBorder( BorderFactory.createTitledBorder( "Auswertungsergebnis" ) ); try { // Eingabedaten auslesen n = Integer.parseInt( number.getText() ); } catch (NumberFormatException e) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>keine Ganzzahl</font></u></html>" ); eingabe = false; } if ( eingabe ) { // auf Primelement testen if ( isPrim( n ) ) { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=green>ein Primelement</font></u></html>" ); } else { primLabel.setText( "<html>" + number.getText() + " ist <u><font color=red>kein Primelement</font></u></html>" ); } } } /** * Testet auf eine Primelement. */ public static boolean isPrim( Integer n ) { boolean ergebnis = true; for( int i = 2; i <= Math.sqrt( Math.abs( n ) ); ++i ) { if ( n % i == 0 ) { ergebnis = false; break; } } if ( n == 0 || n == 1 ) { ergebnis = false; } return ergebnis; } /** * Erzeugt die Programmoberfläche und bringt sie auf das Bild. * Für die Thread-Sicherheit sollte diese Methode aus dem * Ereignisabfertigungs-Thread aufgerufen werden. */ public static void createAndShowGUI() { // Nutzung der voreingestellten Fenster-Dekoration JFrame.setDefaultLookAndFeelDecorated( true ); Primelement prim = new Primelement(); } public static void main( String[] args ) { // Aufgabe für den Ereignisabfertigungs-Thread: // Erzeugen und Anzeigen der Programmoberfläche javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } } ); } }
-
-
@ Gregor & Detector: