POJ_1218 THE DRUNK JAILER

英語読めるようになってきた。
そんなことより、Haskellできるようになりたい
問題
1からnまでのn個の部屋があり、すべて閉まっている。次の操作をn回行う。
[操作]現在i回目で、iで割りきれる部屋番号の部屋が、
    開いている ->閉める
    閉まっている->開ける
操作が終わった後、開いている部屋は何部屋か。
解法
やるだけ
実装

#include <cstdio>
#include <algorithm>
using namespace std;

int solve(int N){
	bool cell[N + 1];
	int  ans = 0;
	//false...locked   true...unlocked
	fill(cell, cell + N + 1, false);
	for(int i = 1; i <= N; i++){
		for(int j = i; j <= N; j += i){
			cell[j] = !cell[j];
		}
	}
	for(int i = 1; i <= N; i++){
		if(cell[i]) ans++;
	}
	return ans;
}
int main(){
	int n, N;
	scanf("%d", &n);
	for(int i = 0; i < n; i++){
		scanf("%d", &N);
		printf("%d\n", solve(N));
	}
	return 0;
}