G
Guest
Gast
Hallo,
ich würde gerne Zahlen in ihre Primfaktoren zerlegen.
Also beispielsweise:
30 = 2 * 3 * 5
oder
6936 = 2 * 2 * 2 * 3 * 17 * 17
Leider ist mein Algorithmus sehr ineffizient. Wie kann ich das schneller durchführen?
Hier mein Code:
ich würde gerne Zahlen in ihre Primfaktoren zerlegen.
Also beispielsweise:
30 = 2 * 3 * 5
oder
6936 = 2 * 2 * 2 * 3 * 17 * 17
Leider ist mein Algorithmus sehr ineffizient. Wie kann ich das schneller durchführen?
Hier mein Code:
Code:
public class PrimeFactors {
public static void main(String[] args) {
int a = 902313;
ArrayList<Long> list = printPrimeFactors(a);
for(int i = 0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
}
public static ArrayList<Long> printPrimeFactors(long num){
ArrayList<Long> primefactors = new ArrayList<Long>();
long whichprime = 1;
long prime;
while (num > 1) {
prime = getPrime(whichprime);
if (num % prime == 0) {
primefactors.add(prime);
num /= prime;
} else {
++whichprime;
}
}
return primefactors;
}
public static long getPrime(long cnt) {
int i = 1;
int ret = 2;
while (i < cnt) {
++ret;
if (isPrime(ret)) {
++i;
}
}
return ret;
}
private static boolean isPrime(long num) {
for (long i = 2; i < num; ++i) {
if (num % i == 0) {
return false;
}
}
return true;
}
}