[ABC206E] Divide Both 解题记录

[ABC206E] Divide Both 解题记录


题意简述

给定整数 L , R L,R L,R,求满足以下条件的数对 ( x , y ) (x,y) (x,y) 的数量。

  • x , y x,y x,y 不互质
  • x ∤ y x \nmid y xy y ∤ x y \nmid x yx

题目分析

正难则反,考虑用所有的满足第一条性质的数对的数量减去不满足第二条性质的数量。
容易想到,如果不考虑第二条性质,那么我们可以枚举因子 i ∈ [ 2 , r ] i \in [2,r] i[2,r],求解出 [ l , r ] [l,r] [l,r] 区间内的 i i i 的倍数的个数 s s s,然后用加法原理,两两配对,累加到答案中。
如何求解 s s s
不妨设 x = k × i + b x=k \times i+b x=k×i+b,则 i ∣ ( x − b ) i \mid (x-b) i(xb),即对于每个 j ∈ [ 1 , k ] j \in [1,k] j[1,k] 都有 i ∣ ( x − b − j × i ) i \mid (x-b-j \times i) i(xbj×i),一共 k k k 个数,而这个 k k k 就是 ⌊ r i ⌋ \lfloor\frac{r}{i}\rfloor ir,对于 k k k 个数字两两配对,即可求解出 s = k × ( k − 1 ) 2 s=\frac{k \times (k-1)}{2} s=2k×(k1)。但是这样会有重复,如:当 i = 2 , 3 , 6 i=2,3,6 i=2,3,6 时,均会有数对 ( 6 , 12 ) (6,12) (6,12),这个时候就需要我们标记了。可以设 c n t i cnt_i cnti 表示 i i i 的质因子的个数,如果 c n t i cnt_i cnti 为偶数,就减去当前贡献,否则加上。那么我们对于 i = 2 , 3 i=2,3 i=2,3 的时候加上了 ( 6 , 12 ) (6,12) (6,12) 的贡献,在 i = 6 i=6 i=6 的时候就会减去一个,这样就保证了贡献不会重复(不清楚的可以手模)。
最后减去不满足第二条限制的贡献:对于每个因子 i ∈ [ 2 , r ] i \in [2,r] i[2,r],减去 [ l , r ] [l,r] [l,r] 中除 i i i i i i 的倍数,即: ⌊ r i ⌋ − 1 \lfloor\frac{r}{i}\rfloor -1 ir1


AC Code
#include<bits/stdc++.h>
#define arrout(a,n) rep(i,1,n)std::cout<<a[i]<<" "
#define arrin(a,n) rep(i,1,n)std::cin>>a[i]
#define rep(i,x,n) for(int i=x;i<=n;i++)
#define dep(i,x,n) for(int i=x;i>=n;i--)
#define erg(i,x) for(int i=head[x];i;i=e[i].nex)
#define dbg(x) std::cout<<#x<<":"<<x<<" "
#define mem(a,x) memset(a,x,sizeof a)
#define all(x) x.begin(),x.end()
#define arrall(a,n) a+1,a+1+n
#define PII std::pair<int,int>
#define m_p std::make_pair
#define u_b upper_bound
#define l_b lower_bound
#define p_b push_back
#define CD const double
#define CI const int
#define int long long
#define il inline
#define ss second
#define ff first
#define itn int
CI N=1e6+5;
int l,r,ans,cnt[N];
void init() {rep(i,2,r) {if(cnt[i]!=0) {continue;}for(int j=i;j<=r;j+=i) {if(cnt[j]>=0) {cnt[j]++;}}for(int j=i*i;j<=r;j+=i*i) {cnt[j]=-1;}}
}
signed main() {std::cin>>l>>r;init();rep(i,2,r) {if(cnt[i]<0) {continue;}int s=r/i-(l-1)/i;s=s*(s-1)/2;if(cnt[i]%2) {ans+=s;} else {ans-=s;}}rep(i,std::max(l,2ll),r) {ans-=r/i-1;}std::cout<<ans*2;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript中Date相关方法

Date 对象用于处理日期和时间 序号方法描述1new Date()获取当前时间2parse()返回毫秒数&#xff08;从 1970-1-1 00:00:00开始&#xff09;3getDate()返回月中的第几天&#xff08;从 1 到 31&#xff09;4getFullYear()返回年份5getMonth()返回月份&#xff08;从 0-11&#x…

1Panel应用推荐:DataEase开源数据可视化分析工具

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

Django在日志中使用AdminEmailHandler发送邮件(同步),及celery异步发送日志邮件的实现

目录 一、使用AdminEmailHandler实现发送日志通知邮件 1&#xff0c;配置日志项 2&#xff0c;配置邮件项 3&#xff0c;在视图里使用日志 二、继承AdminEmailHandler使用celery实现异步发送邮件 1&#xff0c;安装配置celery 2&#xff0c;继承AdminEmailHandler类&…

【excel】常用的50个函数与基础操作(查询函数)

查询函数 &#xff08;1&#xff09;VLOOKUP与MATCH综合 1. VLOOKUP 按列纵向查找&#xff0c;输出单元格内容 VLOOKUP&#xff08;用谁找&#xff0c;在哪找&#xff0c;在哪列&#xff0c;精确/模糊&#xff09; 条件用&连接 VLOOKUP&#xff08;用谁找&#xff0c;在…

网络安全知识核心之TCP与UDP区别

TCP 面向连接&#xff08;如打电话要先拨号建立连接&#xff09;提供可靠的服务;UDP 是无连接的&#xff0c;即发送数据之前不需要建立连接&#xff0c;;UDP 尽最大努力交付&#xff0c;即不保证可靠交付。&#xff08;由于 UDP 无需建立连接&#xff0c;因此 UDP 不会引入建立…

HTML元素语义化(二)及补充

文章目录 HTML5新增元素 - audio**常见属性**代码展示 audio支持的音频格式input元素的扩展内容新增全局属性data–css属性 –white–spacecss属性–text–overflow HTML5新增元素 - audio HTML 元素用于在文档中嵌入音频内容, 和video的用法非常类似 常见属性 常见属性 值…

ts js vue 验证文件 MD5 值 spark-md5

ts js vue 验证文件 MD5 值 spark-md5 如何在前端中验证要上传的文件的 md5 值 一、安装 spark-md5 插件 需要用到 spark-md5 这个插件 官方 github&#xff1a;https://github.com/satazor/js-spark-md5/tree/master yarn add spark-md5 // 或 npm i spark-md5使用的时候引…

基于python+vue文学名著分享系统的设计与实现flask-django-nodejs-php

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的文学名著分享系统。当前的信息管理存在工作效率…

编程题:二叉树层次遍历(Java)

有一棵二叉树&#xff0c;每个节点由一个大写字母标识(最多26个节点&#xff09;。 现有两组字母&#xff0c;分别表示后序遍历&#xff08;左孩子->右孩子->父节点&#xff09;和中序遍历&#xff08;左孩子->父节点->右孩子&#xff09;的结果&#xff0c;请你输…

有没有适合pr剪辑视频使用的蓝色魔法火焰能量特效素材模板

12个蓝色魔法火焰能量特效VFX元素pr素材模板。 可定制的能量电荷、灰尘等离子体和发光的电火花是游戏电影、电影特效或有影响力的视频内容的理想选择&#xff0c;增添了史诗般的电影质量。无论是神秘的爆炸、闪闪发光的闪电还是旋转的漩涡&#xff0c;每一部动画都是力量的灯塔…

Git版本控制

这是两个学习Git推荐必看的文档&#xff0c;第一个链接是Git的官方权威文档&#xff0c;第二个链接是国内程序员在开发中&#xff0c;总结的Git快速入门教程&#xff0c;掌握这个&#xff0c;也足够应付在工作中的场景。 Git权威书籍《ProGit》中文版https://gitee.com/progit…

让天下没有难学的大模型!我整理一份大模型技术知识图谱!

最近陆续有一些同学反馈&#xff0c;感觉大模型知识点太多了&#xff0c;找不到头绪。 今天我整理一份大模型技术以及应用的知识图谱&#xff0c;让大家轻松学习大模型&#xff0c;喜欢点赞、收藏、关注。 另外&#xff0c;技术交流可以文末加入我们。 大模型的预训练技术 …

Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1.)

检查下根目录下的 build.gradle 配置 , 是否只配置了 jcenter 仓库 &#xff0c;加上 google()mavenCentral() 重新编译试一下

ArrayList的常用方法

ArrayList是Java中常用的动态数组类&#xff0c;它提供了一系列用于操作和管理数组的方法。下面是一些ArrayList常用方法的介绍&#xff1a; add()方法&#xff1a;向ArrayList中添加元素&#xff0c;可以指定位置添加元素或者在末尾添加元素。 ArrayList<String> list …

全网最靠谱的短网址平台,你知道几个?

在当今互联网时代&#xff0c;短网址平台成为了人们分享链接的常用工具。它们不仅可以将冗长的网址压缩为简洁的短链接&#xff0c;还能提供更多的功能和优势。在众多的短网址平台中&#xff0c;有几个平台以其可靠性和出色的性能脱颖而出。今天&#xff0c;我们就来介绍几个全…

跟我学C++中级篇——STL的中的删除

一、介绍 在STL中一般删除的方式有两类&#xff0c;一种是使用全局的std::remove(remove_if类似)&#xff0c;一种是使用容器自带的erase&#xff0c;前者其实并没有真正的删除数据&#xff0c;而后者则是在移动时&#xff0c;会有一些细节的处理&#xff0c;否则要么程序崩溃…

《数字人》三个灵魂拷问 是什么?为什么?怎么用?

数字人的出现和发展是由于人工智能和计算机图形学等技术的进步&#xff0c;使得我们可以更好地模拟和创造人类的外貌、行为和交流能力。 1.数字人是什么&#xff1f; 数字人通常是指利用计算机技术和人工智能技术创建的虚拟人物或角色。这些数字化的人物可以具有各种外貌、行为…

SOCKS5代理、代理IP、HTTP与网络安全的深层探寻

在这个数字化时代&#xff0c;网络技术的迅猛发展与网络安全的挑战相伴而生。作为一名软件工程师&#xff0c;深入探索SOCKS5代理、代理IP、HTTP协议及其在网络安全领域的应用&#xff0c;不仅是技术提升的必经之路&#xff0c;更是守护网络世界安全的关键。本文将带您深入理解…

计算机网络基础知识

一、网络概述 1.网络定义与功能 利用通信线路物理地将不同的终端连接起来&#xff0c;按照网络协议相互通信&#xff0c;以共享软件、硬件和数据资源为目标的系统 数据通信&#xff1a;在计算机之间传送各种信息 资源共享&#xff1a;硬件资源共享、软件资源共享 负荷均衡&am…

C++ 小玉在游泳

文章目录 一、题目描述小玉在游泳题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 二、参考代码 一、题目描述 小玉在游泳 题目描述 小玉开心的在游泳&#xff0c;可是她很快难过的发现&#xff0c;自己的力气不够&#xff0c;游泳好累哦。已知小玉第一步能游 …