洛谷 B3834:[GESP202303 一级] 长方形面积 ← 循环结构 + 选择结构

【题目来源】
https://www.luogu.com.cn/problem/B3834
https://oj.czos.cn/p/3344

【题目描述】
小明刚刚学习了如何计算长方形面积。他发现,如果一个长方形的长和宽都是整数,它的面积一定也是整数。现在,小明想知道如果给定长方形的面积,有多少种可能的长方形,满足长和宽都是整数?
如果两个长方形的长相等、宽也相等,则认为是同一种长方形。约定长方形的长大于等于宽。正方形是长方形的特例,即长方形的长和宽可以相等。

【输入格式】
输入一行,包含一个整数 A,表示长方形的面积。约定 2≤A≤1000。

【输出格式】
输出一行,包含一个整数 C,表示有 C 种可能的长方形。

【输入样例一】
4

【输出样例一】
2

【输入样例二】
6

【输出样例二】
2

【样例一解释】
2 种长方形面积为 4,它们的长宽分别为 2×2,4×1。

【样例二解释】
2 种长方形面积为 6,它们的长宽分别为 3×2, 6×1。

【数据范围】
2≤A≤1000

【算法分析】
● 时间复杂度分析如下:
(1)外层循环执行 s 次(i 从 1 到 s)
(2)内层循环在最坏情况下执行 i 次(j 从 1 到 i)
(3)核心语句 if(i*j==s) cnt++; 总执行次数约为 1+2+3+...+s=s(s+1)/2
因此时间复杂度为 O(s²),即 O(n²)。

● 在算法竞赛中,这个 O(n²) 的时间复杂度可支持的问题规模为 5000。本题问题规模仅为 1000,可过,不会 TLE(超时)。

【算法代码】

#include <bits/stdc++.h>
using namespace std;

int s,cnt;
int main() {
    cin>>s;
    for(int i=1; i<=s; i++) {
        for(int j=1; j<=i; j++) {
            if(i*j==s) cnt++;
        }
    }
    cout<<cnt<<endl;

    return 0;
}

/*
in:6
out:2
*/





【参考文献】
https://www.luogu.com.cn/problem/solution/B3834
https://oj.czos.cn/p/3344



 

posted @ 2026-01-07 11:51  Triwa  阅读(136)  评论(0)    收藏  举报