Zerlegung einer Zahl in Primfaktoren

Neue Frage »

Auf diesen Beitrag antworten »
Haevelin Zerlegung einer Zahl in Primfaktoren

Ich möchte eine Zahl in Primfaktoren zerlegen. Allerdings funktioniert folgendes nicht:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication2;

import java.util.ArrayList;

/**
 *
 * @author
 */
public class EA6_Aufgabe_2_1 {
    
    
    public static boolean isPrim(double value) { 
        if (value <= 2) { 
            return (value == 2); 
        } 
        for (double i = 2.0; i * i <= value; i++) { 
            if ((value % i == 0) && ((int)value == value)) { 
                return false; 
            } 
        } 
        return true; 
    }
    
    
        
    public ArrayList<Double> zerlege(int n){
        ArrayList<Double> z = new ArrayList();
       for (int i= 3; i< (int) Math.sqrt(n); i++){
           if (isPrim(i)){
               
                   if (isPrim((n*1.0)/(i*1.0))){
                       z.add(i*1.0);
                       z.add(n*1.0/i);
                   }
               }
           }
       
       return z;
    }
    
    
    
    public static void main(String[] args) {
        
        EA6_Aufgabe_2_1 ea6 = new EA6_Aufgabe_2_1();
        ArrayList<Double> ergebnis = new ArrayList();
        ergebnis = ea6.zerlege(3599);
        for (double i: ergebnis) System.out.println("Ich habe gefunden " + i);
    }
}
 
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
import java.util.ArrayList;

public class EA6_Aufgabe_2_1 {

	// brauchen wir gar nicht
	// unten werden die Faktoren der Größe nach getestet
	// wenn die Zahl nicht prim ist, wurden die Primfaktoren vorher schon gefunden
	public static boolean isPrim(int value) {
		if (value < 2) {
			return false;
		}
		for (int i = 2; i * i <= value; i++) {
			if ((value % i == 0)) {
				return true; // da hattest du false
			}
		}
		return false; // da hattest du true
	}

	public ArrayList<Integer> zerlege(int n) {
		// diamond ergänzt, wir wollen eine generische Liste
		ArrayList<Integer> z = new ArrayList<>();
		//starte bei 2, das ist auch ein möglicher Primfaktor
		// <=, nicht <, besser mit i*i <= n
		for (int i = 2; i <= (int) Math.sqrt(n); i++) {
			while (n % i == 0) {
				z.add(i);
				n /= i;
			}
		}
		//letzten Faktor auch noch hinzufügen
		if (n != 1)
			z.add(n);
		return z;
	}

	public static void main(String[] args) {
		EA6_Aufgabe_2_1 ea6 = new EA6_Aufgabe_2_1();
		// kein Grund, eine Liste anzulegen, wenn direkt eine neue zugewiesen wird
		ArrayList<Integer> ergebnis = ea6.zerlege(3599);
		for (int i : ergebnis)
			System.out.println("Ich habe gefunden " + i);
	}
}
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »