0w1

Yuki 152 貯金箱の消失 ( Triangle, Math )

No.152 貯金箱の消失 - yukicoder
直角三角形の辺はそれぞれ x * x + y * y, x * x - y * y, 2 * x * y と表せる。
総和をとると、2 * x * x + 2 * x * y ≤ L が問題の核心だと分かる。
ここで x, y を枚挙。

#include <bits/stdc++.h>
using namespace std;

signed main(){
  int L; cin >> L;
  L /= 4;
  int ans = 0;
  for( int i = 2; 2 * i * i <= L; ++i )
    for( int j = 1; j < i and 2 * i * j + 2 * i * i <= L; ++j ){
      int a = 2 * i * j;
      int b = i * i - j * j;
      int c = i * i + j * j;
      int gab = __gcd( a, b );
      int gbc = __gcd( b, c );
      int gca = __gcd( c, a );
      if( __gcd( gab, __gcd( gbc, gca ) ) > 1 ) continue;    
      ++ans;
    }
  cout << ans << endl;
  return 0;
}