-3
我有一段代碼,我寫了這個代碼給我任何數字的最大素數因子。Java - 終止無限循環
public static void main(String[] args) {
long n = 49;
while (true) {
long x = sPrimeFactor(n);
if (x < n) n /= x;
else
System.out.println(n);
}
}
public static long sPrimeFactor (long n){
if (n <= 1) return 1;
long cap = (long) Math.sqrt(n);
for (long i = 2; i <= cap; i++) {
if (n % i == 0) return i;
}
return n;
}
正如你可能想象,這種鎖定無限循環,其中數量最大的主要因素將只保留通過函數循環。
當我的解決方案已經達到時,我該如何分解它?
編輯:這是我只是愚蠢。我應該先查找它。在任何情況下,這是解決它的代碼:
public static void main(String[] args) {
long n = (long) 49;
while (true) {
long p = sPrimeFactor(n);
if (p < n) n /= p;
if (p == n) break;
}
System.out.println(n);
}
public static long sPrimeFactor (long n){
if (n <= 1) return 1;
long cap = (long) Math.sqrt(n);
for (long i = 2; i <= cap; i++) {
if (n % i == 0) return i;
}
return n;
}