UVa11461 Square Numbers

問題
http://uva.onlinejudge.org/external/114/11461.html
2つの正の整数a, b(a, bを含む)の間に含まれる2乗の数を答えよ。

解法
整数の間をループで回して調べても良いが、もっとうまい方法がある。
a-1, b それぞれのルート取って切り捨てて差分を取れば良い。(人が書いてたコード見て知った)

#include <iostream>
#include <math.h>

int main() {

  while(1) {
    int a, b; std::cin >> a >> b;
    if((a|b) == 0) break;
    std::cout << int(sqrt(b)) - int(sqrt(a-1)) << std::endl;
  }
  
  return 0;
}