#include #include #include typedef unsigned int u32; typedef unsigned __int64 u64; #define N 10000 #define MIN(a,b) ((a)<(b)?(a):(b)) #define MAX(a,b) ((a)>(b)?(a):(b)) using namespace std; u64 GCD(u64 x, u64 y) { return x ? GCD(y % x, x) : y; } u64 Sqrt(u64 n) { return (u64)( sqrt((double)n + 0.000000000001) ); } int main(int argc, char* argv[]) { // スレッド優先度を下げる. SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST); // 面積は r^2 * (b^2-a^2) / (2*(b^2+a^2)). // この分母をキャンセルする r をここで先に求めておく. // q は k=(a^2+b^2-1)/4 をインデックスにした配列で, // r が q[k] の倍数のとき分母がキャンセルされる. u32 * q = new u32 [N*N/4]; for (u32 i=0; i