// yukicoder: No.781 円周上の格子点の数え上げ // 2019.5.6 bal4u #include #define MAX 10000000 #define MAX2 5000000 int a[MAX+5]; int d[4] = {0,1,0,-1}; void precalc() { // 約数の処理 int i, j, k; a[1] = 1; for (i = 2; i <= MAX; i++) { a[i] = 1 + d[i & 3]; // 約数1とi } for (i = 2; i <= MAX2; i++) { k = d[i & 3]; if (k == 0) continue; for (j = i<<1; j <= MAX; j += i) a[j] += k; } } int main() { int X, Y, max; precalc(); scanf("%d%d", &X, &Y); max = 0; while (X <= Y) { if (a[X] > max) max = a[X]; X++; } printf("%d\n", max << 2); return 0; }