F
Freakfer
Gast
Hallo
wie drücke ich folgende Zeile ohne Math.sqrt aus ?
int teiler_max = (int)(Math.sqrt(n))
Danke
wie drücke ich folgende Zeile ohne Math.sqrt aus ?
int teiler_max = (int)(Math.sqrt(n))
Danke
class Primes222
{
public static void main(String[] args)
{
int start = 0,
end = 0;
// Wert einlesen
start = Integer.parseInt(args[0]);
end = Integer.parseInt(args[1]);
int Primes = 0;
for(int i = start; i <= end; i++)
{
int teiler_max = (int)(Math.sqrt(n));
// Primzahlprüfung
int rest, teiler;
teiler = 2;
while(i%teiler > 0 && teiler<teiler_max)
{
teiler++;
}
if(teiler==teiler_max)
{
System.out.println(n);
Primes++;
}
}
System.out.println("Anzahl von Primzahlen : " + Primes);
}
}
wie drücke ich folgende Zeile ohne Math.sqrt aus ?
int teiler_max = (int)(Math.sqrt(n))
int teiler_max = (int)Math.exp(0.5*Math.log(n)));
Will man prüfen, ob eine Zahl n eine Primzahl ist, so genügt es, mögliche Teiler t der Zahl nur für alle t mit t2<n zu suchen, denn größere Zahlen m können keine Teiler von n mehr sein, wenn keine kleineren Teiler existieren: m·m>n. Beim Testen, ob die Zahl 5987 eine Primzahl ist, muß also nur für die Primzahlen bis Ö5987, also bis 73 geprüft werden, ob sie 5987 teilen. Wenn sich bis da keine Primzahl findet, die Teiler von 5987 ist, ist 5987 eine Primzahl. (Sie ist es.)
soviel ich weiss können gerade zahlen keine primzahlen sein, oder? das könnte doch auch schon ein ansatz seinAnonymous hat gesagt.:Überlegen Sie genau, welche potentiellen Teiler t überhaupt überprüft werden müssen.
Super!0xdeadbeef hat gesagt.:Code:int teiler_max = (int)Math.exp(0.5*Math.log(n)));
Freakfer hat gesagt.:...
wie drücke ich folgende Zeile ohne Math.sqrt aus ?
int teiler_max = (int)(Math.sqrt(n))
...
class Prime
{
static double heron_sqrt(double x, int iter) {
double result = x-1;
if (result<=0)
result=1;
for (int i=0; i<iter; i++) {
x = (result + (x/result))/2;
}
return result;
}
public static void main(String[] args)
{
int start=0, end=0;
int numPrimes = 0;
int teiler_max;
int rest, teiler;
// Werte einlesen
try {
start = Integer.parseInt(args[0]);
end = Integer.parseInt(args[1]);
} catch (NumberFormatException ex) {
System.out.println("Ungültige Werte");
System.exit(0);
}
long ts = System.currentTimeMillis();
for(long i = start; i <= end; i++) {
if ((i&1)!=1) // gerade Zahlen können nicht prim sein!
continue;
teiler_max = (int)(Math.sqrt(i)); // nur Teiler bis sqrt(i) prüfen
//teiler_max = (int)(heron_sqrt(i,4)); // nur Teiler bis sqrt(i) prüfen
// Primzahlprüfung
for (teiler=3; teiler<=teiler_max; teiler+=2)
if (i%teiler == 0)
break;
if (teiler > teiler_max) {
numPrimes++;
System.out.println(i);
}
}
long te = System.currentTimeMillis();
System.out.println("Anzahl von Primzahlen : " + numPrimes);
System.out.println("Rechenzeit : " + (te-ts) + "ms");
}
}