13
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
int l, r;
scanf("%d %d", &l, &r);
int y_max = (int)sqrt(r);
//算l的平方根,然后向上取整并强制转换为整数, y² >= l
int y_min = (int)ceil(sqrt(l));
int count;
if (y_max < y_min)
count = 0;
else
count = y_max - y_min + 1;
printf("%d\n", count);
}
◮:先找到满足 y²<=r 的最大整数yᵐᵃˣ,再找到满足的最小整y²>=l数yᵐⁱⁿ,若yᵐᵃˣ>=yᵐⁱⁿ则区间内完全平方数的个数为yᵐᵃˣ-yᵐⁱⁿ+1 否则个数为 0
◮:
浙公网安备 33010602011771号