這一部分:
for (j=0; j<=4*n^2; j+=4){
for (k=j; k<=4*sqrt(n); k+=4){
t+=8;
}
}
足以回答你的問題。
注意,它是類似於:
for (j=0; j<=n^2; j++){
for (k=4*j; k<=4*sqrt(n); k+=4){
t+=8;
}
}
其類似於:
for (j=0; j<=n^2; j++){
for (k=j; k<=sqrt(n); k++){
t+=8;
}
}
1)第一for
示出了第二個被執行多少次
2)第二個for
顯示執行t+=8;
多少次
讓我們解釋公式的兩個部分:
- 第二部分是與你的第二
for
: k取Math.floor(Math.sqrt(n)) - j + 1
值步驟j
(當j=0
=>Math.floor(Math.sqrt(n)) + 1
值)
- 第一部分與您的第一個
for
有關。但是爲什麼你有sqrt(n)
而不是n^2
?這是棘手的部分。如果分析第二個循環何時生效,則會看到大於sqrt(n)
的任何j
都是無用的(因爲k
的上限爲sqrt(n)
,所以第二個「for content」未執行。這就是爲什麼在公式中你有sqrt(n)
。
這事,因爲你的代碼就是類似於:
for (j=0; j<=sqrt(n); j++){
for (k=j; k<=sqrt(n); k++){
t+=8;
}
}
你所說的「解釋」是什麼意思? – 2014-10-04 19:03:29
我發現命令執行了這麼多次,使用了examples.How可以證明它執行了這麼多次,而不需要使用例子嗎? – 2014-10-04 19:09:21