【数论之路】刷题总结

【1】题目

题意:给你n个人的幸运值,要你要给每个人一些分数的竹子,要求是这些竹子的分数大于该人的幸运值(竹子的分数定义为该竹子长度的欧拉函数值),问最少可以卖多少就可以满足要求。

知识点:欧拉函数的性质:素数(假设是p)的欧拉函数值 == p-1 ,所以素数打表出来,然后从该人的幸运值(假设为m)加一开始判断是否是素数,因为一但是素数,欧拉函数值就是素数减一。

做题总结:一开始读错了题目,以为是大于等于,就用欧拉筛法做,结果不对,改成大于后结果对了。但是交上去一直Runtime error(运行时错误),经过检查不是数组大小问题,这就令人很苦恼了。。可能是哪里的指针出了问题,很难改。然后其实并没有用欧拉函数性质去做,而是直接比较的,要使超时了还能引导着我去往优化上去想,但是越界了。。。

【2】题目

题意:给定两个数a,b,a是一个区域最大边界(满足条件的乘积),b是最小可能的数,问你能找到几对pair,它们的乘积等于a。

做题总结:我的思路一开始是试除法枚举因子,O(\sqrt{n}),大约是10的6次方乘以4的10的四次方(样例数),很明显的TLE了。所以换个思路,利用唯一分解定理,算出a的因子数目,a的因子较少,然后就不T了。还可以有一个小剪枝(也称不上剪枝),就是如果sqrt(a)<  b的话,就一定是0。然后疯狂wa。。。而且我那个板子到1e6还超时。。。其实还有一个关键点是:b是最小的,所以我们在1---b-1范围内寻找a的因子,如果有,前面求出总因子个数就要减去这个不合理的因子个数,至此,本题结束。

知识点:唯一分解定理,也叫算数基本定理,就是一个数总是能分解为素数幂之积。

模板:https://blog.csdn.net/weixin_43238423/article/details/102865412

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值