P1072 [NOIP 2009 提高组] Hankson 的趣味题

news/2025/10/16 18:46:27/文章来源:https://www.cnblogs.com/qwqSW/p/19146391

题目传送门

欢迎光顾我的博客

(下面称 \(V\)\(a_0,a_1,b_0,b_1\) 的值域)

我们在小学二年级就学过,对于两个正整数 \(a,b\) ,可以分别将它们表示为 \(mx,my\) ,其中 \(m=gcd(a,b),gcd(x,y)=1\)

我们借这条性质略微表示一下题目里的 \(x,a_0,a_1,b_0,b_1\)

\( \begin{cases} x=m_1x_1 \\ a_0=m_1y_1 \\ a_1=m_1 \\ x=m_2x_2 \\ b_0=m_2y_2 \\ b_1=m_2x_2y_2 \\ \end{cases} \)

然后我们发现有几个量是可以求的: \(m_1=a_1,x_2=b_1/b_0,y_1=a_0/a_1\)

接下来,我们考虑枚举 \(m_2\) ,这样剩下的 \(x_1,y_2\) 都可以求出来了。

正常来说,如果不质因数分解的话,从 \(1\) 逐个枚举到 \(b_0\) 的时间复杂度是 \(O(V)\) 的,无法接受。

但是我们小学二年级还学过, \(\sqrt b_0\) ~ \(b_0\) 的因子个数与 \(1\) ~ \(\sqrt b_0\) 的因子个数大致相等,可是 \(\sqrt b_0\) ~ \(b_0\) 的整数个数与 \(1\) ~ \(\sqrt b_0\) 就不是一个量级的。

所以我们枚举 \(1\) ~ \(\sqrt b_0\) 里的数,假设当前枚举到了某个因子 \(y\) ,那么 \(\sqrt b_0\) ~ \(b_0\) 里会存在一个数 \(z\) ,使得 \(y \times z = b_0\)。我们在枚举到 \(m_2=y\) 的时候顺带着算算 \(m_2=z\) 时是否有解就行了。

时间复杂度 \(O(n \sqrt V \log V)\)

代码:

P1072
#include<bits/stdc++.h>
#define int long long
using namespace std;inline int read(){int x=0,f=1;char c=getchar();while(c<48){if(c=='-') f=-1;c=getchar();}while(c>47) x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}inline void write(int x){if(x<0) putchar('-'),x=-x;if(x<10) putchar(x+'0');else write(x/10),putchar(x%10+'0');
}int T,A0,A1,B0,B1,M1,Y1,X2,ans;inline int gcd(int a,int b){return (b==0?a:gcd(b,a%b));
}inline int solve(int M2){//计算当前枚举的m2是否有解 int Y2=B0/M2;if(gcd(Y2,X2)>1){//x2,y2不互质时非法 return 0;}if(M2*X2%M1!=0){//x1不为整数时非法 return 0;}int X1=M2*X2/M1;if(gcd(X1,Y1)>1){//x1,y1不互质时非法 return 0;}return 1;
}signed main(){T=read();while(T--){ans=0;A0=read(),A1=read(),B0=read(),B1=read();M1=A1;X2=B1/B0;Y1=A0/A1;int i;for(i=1;i*i<B0;i++){if(B0%i==0){int res1=solve(B0/i);ans+=res1;int res2=solve(i);ans+=res2;}}if(i*i==B0){//b0是平方数的情况需要特判,因为放在循环里会算两次 int res=solve(i);ans+=res;}printf("%lld\n",ans);}return 0;
}

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

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

相关文章

Apifox 9 月更新| AI 生成接口测试用例、在线文档调试能力全面升级、内置更多 HTTP 状态码、支持将目录转换为模块 - 实践

Apifox 9 月更新| AI 生成接口测试用例、在线文档调试能力全面升级、内置更多 HTTP 状态码、支持将目录转换为模块 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impo…

Pasos和RAFT算法

Pasos和RAFT算法Paxos 提出时间1990年,RAFT提出时间2013年。RAFT 是Paxos的简化版,或者说是提高投票效率,但是降低了投票公平性的妥协方案。 RAFT 分布式raft(Replicated And Fault Tolerant)选举算法原理分成三个角…

25w41a快照测评:鹦鹉螺成精了?长矛教你戳穿末影人!

25w41a快照测评:鹦鹉螺成精了?长矛教你戳穿末影人! 🚨 快照速递:1.21.11 第一个测试版来啦! 家人们谁懂啊!Mojang 突然扔出 25w41a 快照,本以为是修 bug 的小更新,结果直接塞了一堆新玩具 —— 鹦鹉螺能穿装…

Day15-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\classlei

Object类 clone() 用于创建对象的副本,是实现对象复制的重要方式 @Override public clonetest clone() {// 注意返回类型是clonetest而非Objecttry {// 调用Object类的clone()方法,正常情况下clone()方法返回object类…

window电脑开启hyperV虚拟化功能后导致本地服务端口被占用问题处理方案

window电脑开启hyperV虚拟化功能后,会预留一些动态端口,导致本地服务端口被占用。 而且使用端口查找命令还找不到这个端口的进程。 处理方案:重新设置预留端口。 1、使用命令netsh int ipv4 show dynamicport tcp可…

RAG检索质量差?这5种分块策略帮你解决70%的问题

RAG 的关键其实就在检索这一步:检索质量好不好,很大程度上取决于怎么切分和存储文档——也就是分块(Chunking)这个看起来不起眼的环节。 固定分块、递归分块、语义分块、结构化分块、延迟分块,每种方法在优化上下…

初识pytorch:网络骨架中的填充之各种层

目录层:网络骨架中的各种填充物核心计算层全连接层卷积层循环层Transformer层激活函数层(引入非线性)正则化层(防止过拟合)Dropout层(nn.Dropout / nn.Dropout2d)批归一化层(nn.BatchNorm2d / nn.BatchNorm1d)…

Day5字符型

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<time.h>int main(){//字符型变量char ch = a;char ar = z;//相同的符号有不同的含义char c = 0;…

本地链路地址

本地链路地址 (Link-Local Address)协议族:在 IPv4 和 IPv6 中都存在,但更常见于IPv6问题中。地址范围:IPv4:169.254.0.0/16IPv6:fe80::/10作用范围:局限于单个物理网络链路(或广播域),也就是你直接连接的交换…

Meta推出Agent Learning via Early Experience,推动语言代理自主学习新范式

原文: https://mp.weixin.qq.com/s/fhNRtk0FhK6K9_LBLwbDSg 全文摘要在人工智能领域,语言代理(Language Agents)的自主学习能力一直是研究热点。传统依赖专家数据的模仿学习(Imitation Learning)存在泛化能力弱、…

fiddlerscriptCustomize Menus - 特洛伊

Customize Menus To customize menus in Fiddler, add rules using FiddlerScript with Global scope. For example: Add context-menu item to open currently selected URLs using Firefoxpublic static ContextActi…

Fiddler And LINQ - 特洛伊

Since moving to Google at the beginning of 2016, I’ve gained some perspective about my work on Fiddler over the prior 12+ years. Mostly, I’m happy about what I accomplished, although I’m a bit awed …

计算机视觉在自动化质检中的应用

本文探讨了如何利用计算机视觉技术实现自动化质量检测,通过定制化视觉模型识别制造过程中的缺陷,涵盖边缘计算在工业场景的应用及机器学习服务如何帮助提升运营效率。计算机视觉在自动化质检中的应用 在2022年6月举行…

深入解析:从 Vercel 构建失败谈 Git 大小写敏感性问题:一个容易被忽视的跨平台陷阱

深入解析:从 Vercel 构建失败谈 Git 大小写敏感性问题:一个容易被忽视的跨平台陷阱pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

完整教程:Logit论文阅读

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

动态加速中优化失败路径反馈的方法

本文分享自天翼云开发者社区《动态加速中优化失败路径反馈的方法》.作者:尹****聪 1 背景 动态探测是周期性进行的,全局默认2分钟,支持分频道设置探测频率(最低1s探测频率),这就决定了选路也是周期性的,在两次最…

铜价冲击下,如何“锁住”母排利润?

面对持续高位的铜材价格,母排作为关键导体,其成本管控已成为电气设备企业盈利能力的关键。利驰软件SuperPanel母排设计软件,通过贯穿设计、生产与采购的全流程数据化管理,为企业提供从“精准预知”到“精准执行”的…

前端快速开发工具推荐与实战 让开发速度提升 3 倍的完整工具链

本文系统介绍前端快速开发工具,包括 VS Code、Postman、Charles、WebDebugX 等,结合实战经验总结从编码、构建、调试到优化的完整提效工具链。一个页面上线早一小时,可能就能多获取成千上万的访问量。 但“快”,从…

js代码、js文件混淆、加密

加密后效果: 步骤(如果没有nodejs环境需要安装nodejs环境:https://blog.nanzhi.vip/?article_id=9&type=url): 1.安装插件:npm install -g javascript-obfuscator 2.创建文件obfuscation-config.json (名称…