2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)
2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)
本题的编码是用Python实现的,C++的思路也是相同的。
希望本文能够帮助到你!
题目:

暴力法:
直接根据题目的要求写:
from math import gcd
def lcm(a, b):
return a*b//gcd(a, b)
n = int(input())
for _ in range(n):
cnt = 0
a0, a1, b0, b1 = map(int, input().split())
for x in range(1, b1 + 1):
# 如果b1不能被x整除,x肯定不满足要求。
if b1 % x != 0: continue
if gcd(x, a0) == a1 and lcm(x, b0) == b1:
cnt += 1
print(cnt)
代码中有个小细节:
# 如果b1不能被x整除,x肯定不满足要求。
if b1 % x != 0: continue
这样可以减少一些不必要的计算。
根据题意,时间复杂度大概是O(n**2),具体一点数据量会达到百亿级别️
而python本来就比较慢,暴力写法必定会跑不出来,必须要进行优化才行。
优化:
由题意知:x和b0的最大公倍数是b1,我们假设一个y,x * y == b1,y可能是答案。优化如下:
from math import gcd
def lcm(a, b):
return a*b//gcd(a, b)
n = int(input())
for _ in range(n):
cnt = 0
a0, a1, b0, b1 = map(int, input().split())
# 1 <= x <= sqrt(b1) <= y <= b1
# x, y 可以取到1到b1的所有值。
for x in range(1, int(b1**0.5)+1):
if b1 % x != 0: continue
y = b1 // x
if gcd(x, a0) == a1 and lcm(x, b0) == b1:
cnt += 1
# 如果该数已经被判断过则跳过。
if x == y: continue
if gcd(y, a0) == a1 and lcm(y, b0) == b1:
cnt += 1
print(cnt)
若出现错误,欢迎指出。
祝大家在学习的道路上能取得大的进步!
2009年NOIP提高组真题-HanKson的趣味题(GCD&LCM优化)的更多相关文章
- $NOIp$提高组历年题目复习
写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...
- Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Hanks 博 ...
- NOIP 2009 Hankson 的趣味题
洛谷 P1072 Hankson 的趣味题 洛谷传送门 JDOJ 1648: [NOIP2009]Hankson的趣味题 T2 JDOJ传送门 Description Hanks 博士是BT (Bio ...
- NOIP2010提高组真题部分整理(没有关押罪犯)
目录 \(NOIP2010\)提高组真题部分整理 \(T1\)机器翻译: 题目背景: 题目描述: 输入输出格式: 输入输出样例: 说明: 题解: 代码: \(T2\)乌龟棋 题目背景: 题目描述: 输 ...
- $NOIp$提高组做题记录
对了我在这里必须讲一个非常重要的事情,就是前天也就是$2019.8.21$的傍晚,我决定重新做人了$!!$ 其实之前没怎么做$Noip$题,那就从现在开始叭
- NOIP提高组题目归类+题解摘要(2008-2017)
因为前几天作死立了一个flag说要把NOIP近十年的题目做一做,并写一个题目归类+题解摘要出来,所以这几天就好好的(然而还是颓废了好久)写了一些这些往年的NOIP题目. 这篇博客有什么: 近十年NOI ...
- NOIP提高组2004 合并果子题解
NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...
- [NOIP提高组2018]货币系统
[TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...
- NOIP提高组初赛难题总结
NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...
随机推荐
- node express框架搭建
前面了解了一些node.js的服务建立及事件绑定和触发,要想一步一步自己来写所有响应,还是比较麻烦,看了express,很多东西都由框架自动完成,开发人员仅需关注自己想要实现的功能即可,真正实现了让开 ...
- 【ES6】迭代器
简介 在 JavaScript 中,迭代器是一个对象,它定义一个序列,并在终止时可能返回一个返回值. 更具体地说,迭代器是通过使用 next() 方法实现迭代器协议的任何一个对象,该方法返回具有两个属 ...
- (瞎学系列)RISC-V & ARM & x86
reduced instruction set computing (RISC) -> ARM & RISC-V complex instruction set computing (C ...
- 通过网页或者移动设备链接跳转qq(tim)添加好友(群)
首先需要去qq群官方,然后点记加群组件,然后选择群,复制对应的代码即可 登录到QQ群官网 点击加群组件 选择群,选择网页还是移动设备 复制代码 示例: <html> <head> ...
- vs调试导入功能时莫名自动结束调试
新装了vs2022,默认下图所示的地方打勾,导致调试文件导入功能时触发了自动结束调试,真是坑爹~~
- git 更换远程连接
原来的git仓库不可用,更换远程仓库 查看远程仓库地址 git remote -v 删除远程仓库 git remote rm origin 添加远程仓库地址 git remote add origin ...
- MySQL 索引的介绍
参考:https://www.cnblogs.com/aspirant/p/9214485.html 参考:https://blog.codinglabs.org/articles/theory-of ...
- Python学习笔记--第二阶段啦
初识对象 示例: 类的成员方法 上图中的self必须填写!!! 示例: 类和对象 有c和c++语言基础的话,就会发现其实是一样的道理,只是实现代码有差异 构造方法(init) 示例: 注意: 其他内置 ...
- ros系统(1)
在虚拟机上安装好ros系统之后,打开终端,启动ROS Master,输入roscore命令,结果如下: 再启动小海龟仿真器,输入命令:rosrun turtlesim turtlesim_node,结 ...
- 配置 RSTP
实验1-5-2 配置 RSTP [实验名称] 配置 RSTP. [实验目的] 理解快速生成树协议 RSTP 的配置及原理. [背景描述] 某学校为了开展计算机教学和网络办公,建立了一个计算机教室和一个 ...