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

题解:洛谷 CF2091E Interesting Ratio

思路推导

我们先对 32 32 32 96 96 96 进行二进制拆分。

相同部分(用 α \alpha α 表示): 5 5 5 2 2 2

不同部分(用 β \beta β 表示): 1 1 1 3 3 3

gcd ⁡ ( 32 , 96 ) \gcd(32,96) gcd(32,96) 就等于 α \alpha α,即 32 32 32

lcm ⁡ ( 32 , 96 ) = α × β \operatorname{lcm}(32,96)=\alpha\times \beta lcm(32,96)=α×β,即 96 96 96

根据常识,两个数字相乘不可能为质数,除非是 1 1 1 乘上一个质数

也就是说, b b b a a a 的倍数,且 b a \dfrac{b}{a} ab 是一个质数。

欧拉筛或埃氏筛找出 [ 1 , 1 0 7 ] [1,10^7] [1,107] 范围内的所有质数,随后枚举 1 1 1 n n n,记作 a a a

对于每一个 a a a,枚举每个质数 x i x_i xi,如果 x i × a > n x_i\times a>n xi×a>n,那么退出本次循环,否则累加答案。

优化

可以发现,对于每个 a a a,可以直接推算出它对答案的贡献。

二分查找,找出质数中第一个大于 ⌊ n a ⌋ \left\lfloor\dfrac{n}{a}\right\rfloor an 的位置 p p p,它对答案的贡献为 p − 1 p-1 p1

实现

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t,n,cnt,prime[10000005];
bool vis[10000005];
void ct(){vis[0]=vis[1]=true;for(int i=2;i<=10000000;i++){if(!vis[i]){prime[++cnt]=i;}for(int j=1;j<=cnt&&i*prime[j]<=10000000;j++){vis[i*prime[j]]=true;if(!(i%prime[j])){break;}}}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);ct();for(cin>>t;t;t--){cin>>n;int ans=0;for(int i=1;i<=n;i++){ans+=upper_bound(prime+1,prime+cnt+1,n/i)-prime-1;}cout<<ans<<'\n';}return 0;
}
http://www.xdnf.cn/news/3351.html

相关文章:

  • Java 中使用正则表达式
  • 在Linux中,KVM和Docker在Linux虚拟化中的区别是什么?
  • 【计算机视觉】语义分割:Mask2Former:统一分割框架的技术突破与实战指南
  • Mysql常用函数解析
  • Annotate better with CVAT
  • 华为OD机试真题——斗地主之顺子(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 《TCP/IP详解 卷1:协议》之第九章:IP选路
  • 湖仓一体化介绍
  • 数据库基本概念:数据库的定义、特点、分类、组成、作用
  • 详解TypeScript中的类型断言及其绕过类型检查机制
  • 【Vue bug】:deep()失效
  • 如何提升自我执行力?
  • 拆解 browser-use 项目——深入理解 Agent 层
  • Linux 环境下 Mysql 5.7 数据定期备份
  • Kotlin-运算符重载函数
  • 生产级RAG系统一些经验总结
  • HTN77A0原理图提供聚能芯半导体禾润一级代理技术支持免费送样
  • 1295.统计位数为偶数的数字
  • SWIG 和 JNA / JNI 等 C 接口封装工具及进行 C 接口的封装
  • AnimateCC基础教学:二次贝塞尔曲线的绘制。
  • Android 动态权限申请
  • 多通道经颅电刺激器的主流厂家介绍
  • hadoop集群建立
  • 【keil使用】无法打开keil工程,只有空白界面的解决方法
  • rk3568安全启动功能实践
  • 介绍一下Files类的常用方法
  • 车辆检测新突破:VFM-Det 如何用大模型提升识别精度
  • LVGL -按键介绍 上
  • Nginx 重写与重定向配置
  • SpringBoot集成Druid启动报错testWhileIdle is true, validationQuery not set