1
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) です。これは高すぎると思いますが、エラーは表示されません。

4

2 に答える 2

2

外側のループは n 2回実行されます。次のループは ∑<sub>i=1 n 2 i 2の合計を実行します。これは O(n 6 ) です。

最も内側のループjは、 が の倍数である場合にのみ実行され、 の値ごとに回数i発生します。最も内側のループは、、、などの値ごとに を実行します。したがって、最も内側のループは、各 に対して ∑<sub>j=1 i ij 回、つまり O(i 3 ) を実行します。iijji2i3ii*ii

したがって、総実行時間は ∑<sub>i=1 n 2 O(i 3 ) + O(n 6 ) であり、 ∑<sub>i=1 n 2 O(i 3 )であるため、これは O(n 8 ) です。 = O(n 8 )。

j++(2 番目のループが ではなく をインクリメントすると仮定していることに注意してくださいi++。答えが の場合はかなり異なりますi++)。

于 2012-10-22T02:49:17.057 に答える
1

そう:

i goes from 1 to n*n.
j goes from 1 to i*i

ただし、最も内側のループは、i が j を除算するときにのみ実行されます。1 と i*i の間に、i で割り切れる数が正確に i 個あります。したがって、最も内側のループは、1 から n*n までの各 i に対して i 回実行されます。

ここまでは n^4 です。

しかし、現在、j は最大で i*i なので、最大で n^4 です。

はい、複雑さは O(n^8) です。

于 2012-10-22T02:41:11.847 に答える