このコードは Javascript で作成されています (言語の選択は重要ではありません)。
var arr = new Array(101);
for (skip = 1; skip <= 100; skip++) {
for (i = 0; i <= 100; i+= skip) {
arr[i] = !arr[i];
}
}
明らかに、このコードが実行された後、配列には真と偽の値がたくさんあります。arr[i] が偶数回タッチされた場合は false になり、それ以外の場合は true になります。
問題は、これらの値がどのようなパターンを形成するかです。arr[15] が true か false かすぐにわかりますか? arr[81]はどうですか?
答えはわかっています (arr[x] は、x が整数の 2 乗の場合に true になります)。しかし、インタビュー中にどのようにすばやく答えを導き出せばよいのかわかりません。
おまけの質問は、N 個の配列要素に対して行うと仮定すると、このコードの時間計算量はどのくらいかということです (以下で回答します)。