完全平方数
描述
小明是一名数学爱好者,他最近学习了完全平方数的知识。完全平方数是指能够表示成某个整数的平方的正整数。例如,1, 4, 9, 16都是完全平方数,而2, 3, 5, 7不是完全平方数。
小明想知道在一个区间[l, r]中,有多少个完全平方数。他向你希望你能写一个程序来帮助他解决这个问题。
day09-01.zip
输入
第一行包含一个整数t,表示测试用例的个数。
接下来t行,每行包含两个正整数l和r,表示查询区间的左右端点。
输出
第一行包含一个整数t,表示测试用例的个数。
接下来t行,每行包含两个正整数l和r,表示查询区间的左右端点。
输入样例 1
3
4 10
9 25
36 60
输出样例 1
2
3
2
提示
在第一个测试用例中,[4, 10]中有两个完全平方数,分别是4和9。
在第二个测试用例中,[9, 25]中有三个完全平方数,分别是9、16和25。
在第三个测试用例中,[36, 60]中有两个完全平方数,分别是36和49。
数据规模:
【以下回答由 GPT 生成】
由于数据规模较大,所以需要一种快速的算法来解决这个问题。我们可以利用完全平方数的特性来进行求解。
完全平方数可以表示为一个整数的平方,因此我们可以计算出给定区间内最小的完全平方数和最大的完全平方数,然后计算它们之间的个数即可。
具体步骤如下:
isPerfectSquare(num)
,用来判断一个数num
是否是完全平方数。我们可以通过计算sqrt(num)
并判断结果是否是整数来实现。如果是整数,则num
是完全平方数,否则不是。countPerfectSquares(l, r)
,用来计算在区间[l, r]
中的完全平方数的个数。具体步骤如下:count
为0。l
到r
的每个数字num
:num
是完全平方数(调用isPerfectSquare(num)
函数)则将count
加1。count
。t
,并循环t
次:l
和r
。countPerfectSquares(l, r)
并输出结果。下面是具体的代码实现:
【相关推荐】
#include <iostream>
#include <cmath>
using namespace std;
int count(int l, int r) {
int count = 0;
int start = ceil(sqrt(l));
int end = floor(sqrt(r));
for (int i = start; i <= end; i++) {
count++;
}
return count;
}
int main() {
int t;
cin >> t;
for (int i = 0; i < t; i++) {
int l, r;
cin >> l >> r;
int result = count(l, r);
cout << result << endl;
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!