irgendwie funktioniert das nicht so ganz. erstens habe ich keine methode nextprim. hab mal versucht eine zu finden aber das klappt nicht. der sagt bei p*q == N das Wert erforderlich ist aber Variable gefunden Wurde.
ich verzweifel hier volkommen weil es einfach nicht klappt
so sieht mein programm aus
import java.io.*;
import java.awt.*;
import java.awt.event.*;
/**
* <p>Überschrift: </p>
*
* <p>Beschreibung: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Organisation: </p>
*
* @author unbekannt
* @version 1.0
*/
public class Main extends Frame implements ActionListener
{
int p,q,N;
int x=1;
long prim;
Button calc;
Button quit;
Label nfo;
TextField input, output;
public Main()
{
setLayout(null);
setSize(600,500);
setTitle("Primfaktorzerlegung");
setBackground(Color.gray);
calc=new Button("Berechnen");
calc.setBounds(50,400,200,50);
calc.addActionListener(this);
add(calc);
quit=new Button("Schliessen");
quit.setBounds(300,400,200,50);
quit.addActionListener(this);
add(quit);
nfo=new Label(" Geben Sie hier die zu berechnende Zahl ein:");
nfo.setBounds(50,70,300,50);
add(nfo);
input=new TextField();
input.setBounds(50,150,200,20);
add(input);
output=new TextField();
output.disable();
output.setBounds(50,250,200,20);
add(output);
show();
}
public void actionPerformed (ActionEvent ae)
{
if (ae.getSource()==quit)
System.exit(0);
if (ae.getSource()==calc)
prim(prim);
}
/* public void textValueChanged(TextEvent te)
{
}
*/
public long prim(long prim)
{
String N = input.getText();
prim=Integer.parseInt(N);
// N = 2773;
p = 2;
q = 2;
do {
p = nextprim();
do
{
q = nextprim();
if( p * q = N)
{
System.out.println(p);
} while (q < N);
}while(p < N);
}while (p*q == N);
return p;
}
/**
* nextPrim
*
* @param p int
* @return int
*/
static int nextprim()
{
do
{
//Primzahlen ausschliesslich ungerade (ab 3)
x += 2;
}
while (!(isprim(x)));
//Kommentar kann zu Testzwecken entfernt werden.
//Ausgabe nur um zu zeigen, dass das Programm arbeitet
//System.out.println(x);
return x;
}
//normaler Algorithmus: Ueberpruefung, ob eine Zahl von n/2
//bis 1 n teilt => keine Primzahl (sehr lange Rechenzeit)
//deshalb wird hier ein sehr viel schnellerer Algorithmus
//verwendet
static boolean isprim(int n)
{
int k = bisqrt(n);
//stellt sicher, dass k ungerade ist
k = k + 1 + (k%2);
return (!(isdiv(k,n)));
}
//Ueberprueft, ob eine Zahl von k bis 1 n teilt
static boolean isdiv(int k, int n)
{
int t = 3;
boolean b = false;
while (t <= k)
{
if ((n % t) == 0)
{
b = true;
break;
}
t += 2;
}
return b;
}
//rekursive Berechnung der ganzzahligen Quadratwurzel von n
static int bisqrt(int n)
{
int l=0;
if (n == 0)
return 0;
else
{
l = 2 * bisqrt(n/4) +1;
if (l*l <= n)
return l;
else
return l-1;
}
}
public static void main(String[] args) {
Main main = new Main();
}
}