洛谷 B4357:[GESP202506 二级] 幂和数 ← 嵌套循环

【题目来源】
https://www.luogu.com.cn/problem/B4357

【题目描述】
对于正整数 n,如果 n 可以表为两个 2 的次幂之和,即 n=2^x+2^y(x,y 均为非负整数),那么称 n 为幂和数。
给定正整数 l,r,请你求出满足 l≤n≤r 的整数 n 中有多少个幂和数。

【输入格式】
一行,两个正整数 l,r,含义如上。

【输出格式】
输出一行,一个整数,表示 l,r 之间幂和数的数量。​​​​​​​

【输入样例】
10 100​​​​​​​

【输出样例】
20

【数据范围】
对于所有测试点,保证 1≤l≤r≤10^4。​​​​​​​

【算法分析】
设 x 初始值为 1,y 初始值为 x。
本题核心技巧在于 x 及 y 的迭代条件分别为 x*=2y*=2

【算法代码】

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

int le,ri,cnt;
int main() {
    cin>>le>>ri;
    for(int x=1; x<=ri; x*=2) {
        for(int y=x; y<=ri; y*=2) {
            if(x+y>=le && x+y<=ri) cnt++;
        }
    }
    cout<<cnt<<endl;
    return 0;
}

/*
in:
10 100

out:
20
*/





【参考文献】
https://www.luogu.com.cn/problem/solution/B4357
https://www.cnblogs.com/wisdel/p/19234553
https://blog.csdn.net/qq_36230375/article/details/149141251
https://gesp.ccf.org.cn/101/attach/1687195838578720.pdf


 

posted @ 2025-11-23 21:09  Triwa  阅读(6)  评论(0)    收藏  举报