for(i = 1; i < n*n; i++){
for(j = 1; j < i*i; j++){
if(j % i == 0){
for(k=0; k < j; k++){
count++;
}
}
}
}
我尝试解决方案:
j迭代到i * i = n ^ 4。对于'k'循环,我们得到从1到n ^ 4的k之和,即n ^ 4(n ^ 4-1)/ 2。所以运行时是O(n ^ 8)。这让我觉得太高了,但我没有看到错误。
答案 0 :(得分:2)
外循环执行n 2 次。下一个循环执行总共Σ i = 1 n 2 i 2 ,即O(n < SUP> 6 )。
最内层循环仅在j
是i
的倍数时运行,i
的每个值都会i
次。最内层循环对j
:j
,i
,2i
等每个此类值执行3i
次,直到i*i
为止。因此,对于每个i
,最内层循环执行Σ j = 1 i ij次,即O(i 3 )
因此,总运行时间为Σ i = 1 n 2 O(i 3 )+ O(n 6 ),即O(n 8 ),因为Σ i = 1 n 2 O(i 3 )= O(n 8 )。
(请注意,我假设第二个循环增加j++
,而不是i++
。如果它是i++
),则答案会有所不同。
答案 1 :(得分:1)
所以:
i goes from 1 to n*n.
j goes from 1 to i*i
但最内层的循环只在我划分j时运行。在1和i * i之间确切存在i个数字,它们可以被i整除。因此,对于每个i,从1到n * n,最内层循环将运行i次。
到目前为止,这是n ^ 4。
但是现在j最多可以是i * i,所以最多n ^ 4。
所以是的,复杂性是O(n ^ 8)。