public static void main(String[] args){
System.out.println("The largest prime factor of 600851475143 is "+largest(primeFactors(600851475143.0)));
}
public static ArrayList<Integer> factor(double n){
ArrayList<Integer> factors = new ArrayList<Integer>();
for(long i = 1; i<=n; i++){
if(isInt(n/i)){
factors.add((int)i);
}
}
return factors;
}
public static ArrayList<Integer> primeFactors(double n){
ArrayList<Integer> factors = factor(n);
ArrayList<Integer> primes = new ArrayList<Integer>();
for(int f : factors){
if(isPrime(f)){
primes.add(f);
}
}
return primes;
}
public static boolean isInt(double d){
return (d==(int)d);
}
public static boolean isPrime(double d){
return (factor(d).size()<=2);
}
public static long largest(ArrayList<Integer> integers){
int max = 1;
for(int i = 0; i<integers.size(); i++){
if(integers.get(i)>max){
max=integers.get(i);
}
}
return max;
}
このコードを実行すると、Javaがメモリ不足であると不平を言うのですか?私はこれを解決するのが難しい問題であるとは思っていませんでした。私のコードは意味があり、小さな数字でもうまく機能しますが、問題があるようです。私のコードにクラッシュを引き起こす問題がありますか、それとも単に私のコード(または一般的にJava)がメモリ効率的ではないのでしょうか?この大きな数字から数を引いて得られる最大の数字は「60085147.0」で、それは正しく答えました。より大きな数値を解析するにはどうしたらいいですか?メモリ不足のJavaでlongsを考慮しようとしていますか?