当前位置: 首页 > news >正文

题解:B4357 [GESP202506 二级] 幂和数

题解:B4357 [GESP202506 二级] 幂和数

题意

给定正整数 \(l\)\(r\),求 \([l,r]\) 中有多少个数可被表示成 \(2^x + 2^y(x,y\) 为非负整数\()\)

数据范围与约定

对于所有测试点,保证 \(1 \le l \le r \le 10^4\)

题解

\(1.\) 暴力求解

暴力枚举 \([l,r]\) 之间的数,再枚举 \(x\)\(y\),如果这个数可以被表示为幂和数,就将答案 \(+1\)

Code

时间复杂度 \(O(n)\),其中 \(n=r-l+1\),因为 \(x\)\(y\) 的枚举都是常数(\(14 \times 14 = 196\))。

void Solve(void)
{int l,r;cin>>l>>r;int ans=0;for(int i=l;i<=r;i++){bool flag=false;for(int x=0;x<=14;x++){for(int y=0;y<=14;y++){if(pow(2,x)+pow(2,y)==i)flag=true;}}if(flag)ans++;}cout<<ans<<endl;
}

\(2.\) 位运算角度

分类讨论:

  • \(x \neq y\) 时,\(2^x+2^y\),因为 \(2^x\) 的二进制位在第 \(x\) 位有 \(1\),其余全为 \(0\)。所以 \(2^x+2^y\) 的二进制有两位是 \(1\),其余为 \(0\)

  • \(x=y\) 时,\(2^x+2^y=2^{x+1}\),所以在 \(x+1\) 位有一个 \(1\),其余全部为 \(0\)

\(\therefore\),当这个数是幂和数是时,它的二进制位只能有 \(\le 2\)\(1\),特别的,当这个数为 \(1\) 时,虽然满足条件,但不是幂和数,因为最小的幂和数时 \(2^0+2^0=2\),所以不能从 \(1\),开始判断,只需要取 \(max\{2,l\}\) 即可。

Code

void Solve(void)
{int l,r;cin>>l>>r;int ans=0;for(int i=max(l,2);i<=r;i++){if(__builtin_popcount(i)<=2)ans++;}cout<<ans<<endl;
}
http://www.hskmm.com/?act=detail&tid=15022

相关文章:

  • 2025年9月23日 - 20243867孙堃2405
  • 2025.9.23
  • 软件工程学习日志2025.9.23
  • markdown 使用指南
  • 第6.2节 Android Agent制作<三>
  • LVS 服务器 知识
  • 07-django+DRF项目中统一json返回格式 - 详解
  • 软工第二次作业——个人项目
  • 近十年 CSP-J 复赛知识点分布表
  • AT_arc181_d [ARC181D] Prefix Bubble Sort
  • 【MySQL】使用C/C++链接mysql数据库 - 指南
  • 枚举子集
  • cv-css 快捷方式,将指定节点的计算样式获取下拉 获取tailwind网页样式成原生样式
  • day002
  • PyTorch图神经网络(四)
  • 软件工程:构建数字世界的基石
  • Avalonia 学习笔记07. Control Themes(控件主题)
  • matter 协议的架构;
  • matter 协议解析;
  • 9月23日
  • Nordic 的支持对Matter 协议的支持;
  • nRF54LM20A USB
  • nRF54LM20A GRTC
  • 2025年10款最佳生产力提效chrome插件推荐,亲测有用
  • Avalonia 学习笔记06. Page Layout(页面布局)
  • 发表第一篇文章,谈谈对软件工程的理解
  • nRF54LM20A 芯片分析;
  • 第二天
  • 内部类
  • NRF54L15 两者结合的jlink保护机制(硬件+软件)