B4553 [GESP202606 二级] 完全平方数计数

题目描述

小杨同学正在研究完全平方数。

平方: 一个数的平方等于这个数乘以这个数本身。

完全平方数: 指可以恰好表示为某个正整数的平方的数。

例如,999 是完全平方数,因为 9=32=3×39 = 3^2 = 3 \times 39=32=3×3;但 272727 不是,因为 272727 不能表示为任何正整数的平方。

给定两个正整数 lllrrr(保证 l≤rl \le rlr),小杨同学想知道 lllrrr 之间的所有正整数中(包含 lllrrr),有多少个数是完全平方数。

输入格式

输入两行,第一行为一个正整数 lll,第二行为一个正整数 rrr

输出格式

输出一个非负整数,表示 lllrrr 中,有多少个正整数是完全平方数。如果 lllrrr 中没有完全平方数,则输出 000

输入输出样例 #1

输入 #1

1
21

输出 #1

4

说明/提示

样例解释 1

111212121 中,有以下 444 个整数是完全平方数:
1,4,9,161, 4, 9, 161,4,9,16

数据范围

1≤l≤r≤20001 \le l \le r \le 20001lr2000

解析

方法一

枚举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;
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐