目录

  • 题目截图
  • 题目分析
  • 想法1:遍历所有可能的xy(tle)
  • 想法2:遍历可能的x(accepted)
  • 总结

题目截图

题目分析

  • 想法1,遍历所有kab作为xy的所有可能值,找到其所有因子,然后看看另一个因子是否符合,但这样可能最坏情况k可以从1到1e10直接炸裂
  • 想法2,固定x,然后分解xy的质因数,看看x还差什么,设置还差的东西为base,然后看看base的倍数落在b到d中的值,成立的就作为y即可

想法1:遍历所有可能的xy(tle)

# -*- coding: utf-8 -*-
# @Time    : 2022/10/16 22:22
# @Author  : bridgekiller
# @FileName: E.py
# @Software: PyCharm
# @Blog    :bridge-killer.blog.csdn.netimport sysinput = sys.stdin.readline# 装饰器
# 解决带有参数和返回值函数的装饰器
# 类似aop的思想, 非侵入式地横切
# --------------------
def debug(func):def wrapper(*args, **kwargs):print('----------------')res = func(*args, **kwargs)print('----------------')return resreturn wrapper# --------------------# 装饰器,解决dfs爆栈问题
# --------------------
# 手写栈模板
# 克服py栈太浅的问题
from types import GeneratorTypedef bootstrap(f, stack=[]):def wrappedfunc(*args, **kwargs):if stack:return f(*args, **kwargs)else:to = f(*args, **kwargs)while True:if type(to) is GeneratorType:stack.append(to)to = next(to)else:stack.pop()if not stack:breakto = stack[-1].send(to)return toreturn wrappedfunc# --------------------
import mathdef factor(num):factors = []for_times = int(math.sqrt(num))for i in range(for_times + 1)[1:]:if num % i == 0:factors.append(i)t = int(num / i)if not t == i:factors.append(t)return factorsdef solve():a, b, c, d = list(map(int, input().split()))# cd >= xy = kabk = (c * d) // (a * b) # [1, k]for mul in range(1, k + 1):xy = mul * a * bfs = factor(xy)for f in fs:if a < f <= c and b < xy // f <= d:return print(f, xy // f)if b < f <= d and a < xy // f <= c:return print(xy // f, f)return print(-1, -1)if __name__ == '__main__':for _ in range(int(input())):solve()

想法2:遍历可能的x(accepted)

# -*- coding: utf-8 -*-
# @Time    : 2022/10/16 22:22
# @Author  : bridgekiller
# @FileName: E.py
# @Software: PyCharm
# @Blog    :bridge-killer.blog.csdn.netimport sysinput = sys.stdin.readline# 装饰器
# 解决带有参数和返回值函数的装饰器
# 类似aop的思想, 非侵入式地横切
# --------------------
def debug(func):def wrapper(*args, **kwargs):print('----------------')res = func(*args, **kwargs)print('----------------')return resreturn wrapper# --------------------# 装饰器,解决dfs爆栈问题
# --------------------
# 手写栈模板
# 克服py栈太浅的问题
from types import GeneratorTypedef bootstrap(f, stack=[]):def wrappedfunc(*args, **kwargs):if stack:return f(*args, **kwargs)else:to = f(*args, **kwargs)while True:if type(to) is GeneratorType:stack.append(to)to = next(to)else:stack.pop()if not stack:breakto = stack[-1].send(to)return toreturn wrappedfunc# --------------------
import mathdef factor(num):factors = []for_times = int(math.sqrt(num))for i in range(for_times + 1)[1:]:if num % i == 0:factors.append(i)t = int(num / i)if not t == i:factors.append(t)return factorsdef solve():a, b, c, d = list(map(int, input().split()))# cd >= xy = kab# 遍历x# 给ab分解质因数tmp = a * bfactors = [] # [factor, exp]while tmp != 1:for i in range(2, tmp + 1):cnt = 0while tmp % i == 0:cnt += 1tmp //= iif cnt > 0:factors.append([i, cnt])if tmp == 1:break#print(factors)if a * b == 1:return print(a + 1, b + 1)#print(factors)for x in range(a + 1, c + 1):# x = pi ^ ri# ab -> factorsbase = 1for f, needCnt in factors:# 看看x能满足f的多少指数tmp = xcnt = 0while tmp % f == 0:cnt += 1tmp //= fif cnt < needCnt:for _ in range(needCnt - cnt):base *= f#print(f'x:{x}, base:{base}')k1 = b // basek2 = d // basefor k in range(k1, k2 + 1):if b < k * base <= d:return print(x, k * base)return print(-1, -1)if __name__ == '__main__':for _ in range(int(input())):solve()

总结

  • 数论题也要考虑最坏情况的复杂度
  • 有时候有多种遍历方式,不同的解法,要记得计算复杂度

codeforces:E1. Divisible Numbers (easy version)【数论 + 复杂度计算 + 分解质因数】相关推荐

  1. Codeforces Round #828 (Div. 3) E1. Divisible Numbers (easy version) 解题报告

    原题链接: Problem - E1 - Codeforces 题目描述: This is an easy version of the problem. The only difference be ...

  2. E1. Divisible Numbers (easy version)(数学)

    Problem - E1 - Codeforces 题意: 这是一个简单版本的问题.简单版和困难版的唯一区别是对a.b.c和d的限制. 给你4个正整数a.b.c.d,a<c,b<d.找到任 ...

  3. CodeForces - 1234B1 Social Network (easy version)

    CodeForces - 1234B1 Social Network (easy version) 题目: The only difference between easy and hard vers ...

  4. Codeforces Round #828 (Div. 3) E2. Divisible Numbers (hard version)

    翻译: 这是这道题的难解版.简单版本和硬版本之间的唯一区别是对

  5. CodeForces - 1249C2 Good Numbers (hard version)(进制转换)

    题目链接:点击查看 题目大意:给出一个数n,求出一个大于等于n的"好数","好数"的规定是只由3的幂次之和构成 题目分析:直接将n拆成三进制,然后贪心从最高位开 ...

  6. CodeForces - 1118F1 Tree Cutting (Easy Version)(树形dp)

    题目链接:点击查看 题目大意:给定n个点,每个点的权值分别对应颜色:0:无颜色,1:红色,2:蓝色,现在需要切割边,使切割后的两个部分不能出现红色和蓝色掺杂的部分,也就是说两个部分必须只能各自含有一个 ...

  7. E2. Divisible Numbers (hard version)

    题意:给定a,b,c,d四个数字,要求猜出两个数字满足以下条件 1. a<x<=c,b<y<=d 2.gcd(x*y,a*b)==a*b 思路:要明晰一个规律,一个数的约数个数 ...

  8. Codeforces C1. Prefix Flip (Easy Version) (二进制串 / 模拟 / 构造) (Roun #658 Div.2)

    传送门 题意: 给出两个长度为n的二进制串a和b,你每次可选取一段前缀子串取反并翻转(即:10010 -> 01101 -> 10110).已知在3 * n次操作内一定能将a变成b.先让你 ...

  9. CF1497E1 Square-free division (easy version)

    CF1497E1 Square-free division (easy version) 题意: 这是简单版,此题中 k=0 给出一串长为 n 的序列 a1,a2,a3...ana_1,a_2,a_3 ...

最新文章

  1. R语言ggplot2可视化:使用热力图可视化dataframe数据、自定义设置热力图的颜色、自定添加标题、轴标签、热力图线框等
  2. pandas 修改数据和数据类型
  3. 系统高可用设计与实践
  4. J2EE环境的搭建之二—oracle的安装与详解
  5. spring mvc DispatcherServlet详解之一--request通过HandlerMaping获取控制器Controller过程
  6. 【XAudio2】7.如何加载音频数据文件
  7. c++内存分配的方式
  8. 单点突破,击穿阈值,DevOps转型你需要这样做
  9. LeetCode 360. 有序转化数组(抛物线对称轴)
  10. SpringBoot b2b2c 多用户商城系统 (一)构建第一个SpringBoot工程
  11. PAT甲级1056(queue的用法)
  12. tornado框架基础05-模板继承、UImodul和UImethods
  13. 亚嵌协办 博文视点Open Party第5期 参会感言
  14. moss 自定义文档库文档图标
  15. windows核心编程之DIPS工具学习总结
  16. 移动端预览PDF及转成图片保存
  17. CV识别图片背景主要颜色
  18. React项目案例-影视资源网站
  19. 软件测试(六)——缺陷以及总结
  20. [转] 程序员也要养生

热门文章

  1. 开始使用 Elasticsearch (1)
  2. Android Espresso(一)——环境建立
  3. 3dsmax渲染AVI格式动画的画面不清晰
  4. FusionAccess桌面云
  5. php手册3.1,thinkphp3.1手册下载|
  6. 关于团队协作开发的一些思考
  7. 图像降噪(去噪)是什么原理?
  8. 【洛谷P2967】【USACO 2009 Dec】电子游戏 Video Game Troubles
  9. 物联网的那些事----------01无线通信技术介绍
  10. 从程序员角度看“上帝“玩游戏