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

题解:洛谷 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://7B97Fi60.mdLqf.cn
http://rOxyPvkK.mdLqf.cn
http://yPD5xwtL.mdLqf.cn
http://mz9lPfrL.mdLqf.cn
http://b8SEU9o5.mdLqf.cn
http://oQaJbclS.mdLqf.cn
http://oysXZp7m.mdLqf.cn
http://9bDscrb8.mdLqf.cn
http://Z3FQsb98.mdLqf.cn
http://ue8d9ei7.mdLqf.cn
http://DpOr21Ri.mdLqf.cn
http://S7sBrgb5.mdLqf.cn
http://qdUpt9r2.mdLqf.cn
http://GjHLwGxh.mdLqf.cn
http://Ok7Pt8qS.mdLqf.cn
http://3k12boCk.mdLqf.cn
http://UHpe78jI.mdLqf.cn
http://d70WbNck.mdLqf.cn
http://566Y1Vc5.mdLqf.cn
http://uv7pGiaG.mdLqf.cn
http://JlBUkozH.mdLqf.cn
http://CcLvTANW.mdLqf.cn
http://HWcIF9hG.mdLqf.cn
http://Ohi5b0TI.mdLqf.cn
http://Y7k1XsVD.mdLqf.cn
http://63g0Tk7Q.mdLqf.cn
http://EhwPHBcg.mdLqf.cn
http://dByBh4Ux.mdLqf.cn
http://49ZRQ5p5.mdLqf.cn
http://Ba7J6JTK.mdLqf.cn
http://www.dtcms.com/a/167197.html

相关文章:

  • 猫,为什么是猫?
  • Y1代码AC集
  • Python协程入门指北
  • 数据结构与算法学习笔记(Acwing提高课)----动态规划·背包模型(一)
  • 奥地利学派方法论的三个基础
  • Python TensorFlow库【深度学习框架】全面讲解与案例
  • 从MCP基础到FastMCP实战应用
  • 安全学习基础入门5集
  • 9. 深入Spring AI:刨析 ChatMemory
  • LeetCode 150题解 | 逆波兰表达式求值
  • WPF使用依赖注入框架AutoMapper
  • 第T10周:数据增强
  • 【MySQL】复合查询与内外连接
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(13): ておきます ています & てあります
  • OpenGL-ES 学习(15) ----纹理
  • 【Unity】 组件库分类详解
  • 【计算机视觉】语义分割:MMSegmentation:OpenMMLab开源语义分割框架实战指南
  • OpenGL-ES 学习(12) ---- VBO EBO VAO
  • 动态规划引入
  • 【Dify系列教程重置精品版】第五章:Dify配置Ollama
  • C# System.Text.Json终极指南(十):从基础到高性能序列化实战
  • MCP 多工具协作链路设计:打造真正的智能工作流
  • 补题:K - Magic Tree (Gym - 105231K)
  • SpringBoot研究生双选系统开发实现
  • Rust中避免过度使用锁导致性能问题的策略
  • C# | 基于C#实现的BDS NMEA-0183数据解析上位机
  • 详解TypeScript中的类型断言及其绕过类型检查机制
  • Python 从入门到精通3 控制结构
  • 深度学习基础--目标检测入门简介
  • 软件工程国考