3 回答

TA貢獻1856條經驗 獲得超11個贊
您可以在無效條件
之后中斷內部循環,也可以從3或7開始,因為[1,2,3,4,5,6可以通過[4,6,8,10,12]進行測試 -
這是可選的,但中斷很重要
for (int i = 20; i < Integer.MAX_VALUE; i++) {
int seImparte = 0;
for (int j = 7; j <= 20; j++) {
if (i % j != 0) {
seImparte++; break;
}
}
if (seImparte == 0) {
System.out.println(i);
break;
}
}
輸出: 232792560

TA貢獻1824條經驗 獲得超5個贊
與其優化暴力破解方法,不如使用簡單的數學規則。
由此產生的復雜性與“大量”相對應O(n*log(n))
Python 代碼使用最小公用多重函數
def gcd(a, b):
while b > 0:
a, b = b, a % b
return a
def lcm(a, b):
return a * b // gcd(a, b) # integer division
d = 1
for i in range(2, 21): #last i=20
d = lcm(d, i)
print(d)
>>[Dbg]>>> 232792560
此外,我們可以將范圍內的所有數字分解為素數,并記住每個素數的最大冪。在這種情況下:并乘以這些冪。更復雜的代碼(但這種方式有時可能很有用)2:4; 3:2; 5:1; 7:1; 11:1; 13:1; 17:1; 19:1
232792560 = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19

TA貢獻1777條經驗 獲得超10個贊
希望這是你正在尋找的:
for (int i = 2; i < Integer.MAX_VALUE; i++) {
for (int j = 2; j <= 20; j++) {
if (i % j == 0) {
System.out.println("i : "+i+" j : "+j);
break;
}
}
}
添加回答
舉報