CCF-GESP计算机学会等级考试2026年6月二级C++T1 完全平方数计数
·
B4553 [GESP202606 二级] 完全平方数计数
题目描述
小杨同学正在研究完全平方数。
平方: 一个数的平方等于这个数乘以这个数本身。
完全平方数: 指可以恰好表示为某个正整数的平方的数。
例如,999 是完全平方数,因为 9=32=3×39 = 3^2 = 3 \times 39=32=3×3;但 272727 不是,因为 272727 不能表示为任何正整数的平方。
给定两个正整数 lll 和 rrr(保证 l≤rl \le rl≤r),小杨同学想知道 lll 到 rrr 之间的所有正整数中(包含 lll 和 rrr),有多少个数是完全平方数。
输入格式
输入两行,第一行为一个正整数 lll,第二行为一个正整数 rrr。
输出格式
输出一个非负整数,表示 lll 到 rrr 中,有多少个正整数是完全平方数。如果 lll 到 rrr 中没有完全平方数,则输出 000。
输入输出样例 #1
输入 #1
1
21
输出 #1
4
说明/提示
样例解释 1
在 111 到 212121 中,有以下 444 个整数是完全平方数:
1,4,9,161, 4, 9, 161,4,9,16。
数据范围
1≤l≤r≤20001 \le l \le r \le 20001≤l≤r≤2000。
解析
方法一
枚举l到r的所有数,用循环判断是否为完全平方数,详见代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int l,r,cnt=0;
cin>>l>>r;
for(int i=l;i<=r;i++){
for(int j=1;j*j<=i;j++){
if (j*j==i){
cnt++;
}
}
}
cout<<cnt;
return 0;
}
方法二
在方法一的基础上改进完全平方数的判断方法,使用sqrt函数求平方根后,取整再验证是否为完全平方数,详见代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int l,r,cnt=0;
cin>>l>>r;
for(int i=l;i<=r;i++){
int d=sqrt(i);
if (d*d==i) cnt++;
}
cout<<cnt;
return 0;
}
方法三
使用sqrt®可以计算出1到r中有多少个完全平方数,减去sqrt(l-1)即可计算出l到r中有多少个完全平方数,详见代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int l,r;
cin>>l>>r;
cout<<int(sqrt(r))-int(sqrt(l-1));
return 0;
}
更多推荐
所有评论(0)