codeforces:E1. Divisible Numbers (easy version)【数论 + 复杂度计算 + 分解质因数】
目录
- 题目截图
- 题目分析
- 想法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)【数论 + 复杂度计算 + 分解质因数】相关推荐
- 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 ...
- E1. Divisible Numbers (easy version)(数学)
Problem - E1 - Codeforces 题意: 这是一个简单版本的问题.简单版和困难版的唯一区别是对a.b.c和d的限制. 给你4个正整数a.b.c.d,a<c,b<d.找到任 ...
- CodeForces - 1234B1 Social Network (easy version)
CodeForces - 1234B1 Social Network (easy version) 题目: The only difference between easy and hard vers ...
- Codeforces Round #828 (Div. 3) E2. Divisible Numbers (hard version)
翻译: 这是这道题的难解版.简单版本和硬版本之间的唯一区别是对
- CodeForces - 1249C2 Good Numbers (hard version)(进制转换)
题目链接:点击查看 题目大意:给出一个数n,求出一个大于等于n的"好数","好数"的规定是只由3的幂次之和构成 题目分析:直接将n拆成三进制,然后贪心从最高位开 ...
- CodeForces - 1118F1 Tree Cutting (Easy Version)(树形dp)
题目链接:点击查看 题目大意:给定n个点,每个点的权值分别对应颜色:0:无颜色,1:红色,2:蓝色,现在需要切割边,使切割后的两个部分不能出现红色和蓝色掺杂的部分,也就是说两个部分必须只能各自含有一个 ...
- E2. Divisible Numbers (hard version)
题意:给定a,b,c,d四个数字,要求猜出两个数字满足以下条件 1. a<x<=c,b<y<=d 2.gcd(x*y,a*b)==a*b 思路:要明晰一个规律,一个数的约数个数 ...
- Codeforces C1. Prefix Flip (Easy Version) (二进制串 / 模拟 / 构造) (Roun #658 Div.2)
传送门 题意: 给出两个长度为n的二进制串a和b,你每次可选取一段前缀子串取反并翻转(即:10010 -> 01101 -> 10110).已知在3 * n次操作内一定能将a变成b.先让你 ...
- CF1497E1 Square-free division (easy version)
CF1497E1 Square-free division (easy version) 题意: 这是简单版,此题中 k=0 给出一串长为 n 的序列 a1,a2,a3...ana_1,a_2,a_3 ...
最新文章
- R语言ggplot2可视化:使用热力图可视化dataframe数据、自定义设置热力图的颜色、自定添加标题、轴标签、热力图线框等
- pandas 修改数据和数据类型
- 系统高可用设计与实践
- J2EE环境的搭建之二—oracle的安装与详解
- spring mvc DispatcherServlet详解之一--request通过HandlerMaping获取控制器Controller过程
- 【XAudio2】7.如何加载音频数据文件
- c++内存分配的方式
- 单点突破,击穿阈值,DevOps转型你需要这样做
- LeetCode 360. 有序转化数组(抛物线对称轴)
- SpringBoot b2b2c 多用户商城系统 (一)构建第一个SpringBoot工程
- PAT甲级1056(queue的用法)
- tornado框架基础05-模板继承、UImodul和UImethods
- 亚嵌协办 博文视点Open Party第5期 参会感言
- moss 自定义文档库文档图标
- windows核心编程之DIPS工具学习总结
- 移动端预览PDF及转成图片保存
- CV识别图片背景主要颜色
- React项目案例-影视资源网站
- 软件测试(六)——缺陷以及总结
- [转] 程序员也要养生
热门文章
- 开始使用 Elasticsearch (1)
- Android Espresso(一)——环境建立
- 3dsmax渲染AVI格式动画的画面不清晰
- FusionAccess桌面云
- php手册3.1,thinkphp3.1手册下载|
- 关于团队协作开发的一些思考
- 图像降噪(去噪)是什么原理?
- 【洛谷P2967】【USACO 2009 Dec】电子游戏 Video Game Troubles
- 物联网的那些事----------01无线通信技术介绍
- 从程序员角度看“上帝“玩游戏