时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

多次查询[l,r]范围内的完全平方数个数

定义整数x为完全平方数当且仅当可以找到整数y使得y*y=x

输入描述:

第一行一个数n表示查询次数
之后n行每行两个数l,r

输出描述:

对于每个查询,输出一个数表示答案
示例1

输入

复制
5
1 3
1 4
2 4
4 4
1 1000000000

输出

复制
1
2
1
1
31622

备注:

n <= 100000
0<= l <= r <= 1000000000

思维题

对l开根号之后向上取整,对r开根号向下取整,求数量即可,可以带个数进去。康康要不要加一减一。

#include <bits/stdc++.h>
using namespace std;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
typedef long long ll;

inline int read() {
    int s = 0, w = 1; char ch = getchar();
    while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }
    while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
    return s * w;
}

int main() {
    int T = read();
    while (T--) {
        int l = read(), r = read();
        int ans = floor(sqrt(r))- ceil(sqrt(l)) + 1;
        printf("%d\n", ans);
    }
    return 0;
}