最新要闻
- 今日热闻!光速破发?iPhone 14黄色版还未开售便降价600元
- 华硕发布ROG Strix Impact III鼠标:双手通用、可更换微动插槽
- 真香!重庆购买HUAWEI问界M7直补3万:起售仅25.98万
- 当前简讯:滴滴快车预付车费什么时候退款_滴滴快车预付车费什么意思
- 今日播报!客服回应疯狂小杨哥带货翻车:有巡查、违规会处罚
- 怕了吗?长城公布“1000万悬赏计划”:严厉打击网络水军
- 天天通讯!伊朗外长:伊沙恢复外交关系将为两国和地区发展注入巨大动能
- 世界快讯:日系车掀起买一送一热潮:买皓影插混送飞度、买日产楼兰送轩逸
- 天天热资讯!50万以内最舒适二排 理想L7正式交付:31.98万起售
- 环球新资讯:10年分红1000多亿!董明珠鼓励员工“砸锅卖铁”买格力股票
- 资讯推荐:全球最强!传音发布260W有线、110无线快充:8分钟充满
- 世界观热点:美国科学家改变人类科技、终极能源即将实现?真相来了!
- 世界快讯:《原子之心》更新:添加FOV设置、删除种族主义动画
- 今亮点!霸道女总裁加盟《碟中谍8》
- 天天播报:00后男生每天下班后卖烤肠解压 50元投资日赚200元:厌恶刷视频、打游戏
- 环球微速讯:比进口价格便宜!海南三亚榴莲今年6月将大规模上市
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球百事通!聪明的燕姿
聪明的燕姿
城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。
可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!
燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字 $S$,那么自己等的人手上的号码牌数字的所有正约数之和必定等于 $S$。
【资料图】
所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)。
可是她忙着唱《绿光》,想拜托你写一个程序能够快速地找到所有自己等的人。
输入格式
输入包含 $k$ 组数据。
对于每组数据,输入包含一个号码牌 $S$。
输出格式
对于每组数据,输出有两行。
第一行包含一个整数 $m$,表示有 $m$ 个等的人。
第二行包含相应的 $m$ 个数,表示所有等的人的号码牌。
注意:你输出的号码牌必须按照升序排列。
数据范围
$1 \leq k \leq 100$,$1 \leq S \leq 2 \times {10}^{9}$
输入样例:
42
输出样例:
320 26 41
解题思路
最近又重新做了下这道题,顺便看了下以前写的题解发现很多东西写得莫名奇妙的()
因此打算重新写过一篇,以前的题解就不删了,可以点击这里的链接查看:聪明的燕姿。
写完后发现还是很长,看不下去可以关掉,毕竟不敢对题解的质量进行保证qwq。
首先看到约数之和就很容易想到公式
$$\prod\limits_{i=1}^{n}{\sum\limits_{j=0}^{\alpha_i}{P_i^j}} = \left( {P_1^0 + P_1^1 + \cdots + P_1^{\alpha_1}} \right) \cdot \left( {P_2^0 + P_2^1 + \cdots + P_2^{\alpha_2}} \right) \cdots \left( {P_n^0 + P_n^1 + \cdots + P_n^{\alpha_n}} \right)$$
因此问题就变成了有多少个质因子 $P_i$ 以及对应的次幂 $\alpha_i$ 所构成的项 $\sum\limits_{j=0}^{\alpha_i}{P_i^j}$ 累乘得到的结果恰好为 $S$。
看上去似乎没有很好的解决方法,那只能通过枚举所有的 $P_i$ 和 $\alpha_i$ 来统计了。我们来分析一下暴搜的可行性,首先最多会有多少项进行累乘呢?通过放缩容易发现
$$\begin{align*} 2 \times {10}^{9} &= \left( {1 + P_{1} + \cdots + P_{1}^{\alpha_{1}}} \right) \cdot \left( {1 + P_{2} + \cdots + P_{2}^{\alpha_{2}}} \right) \cdot \cdots \cdot \left( {1 + P_{n} + \cdots + P_{n}^{\alpha_{n}}} \right) \\ &> \left( {1 + 2} \right) \cdot \left( {1 + 3} \right) \cdot \left( {1 + 5} \right) \cdot \left( {1 + 7} \right) \cdot \left( {1 + 11} \right) \cdot \left( {1 + 13} \right) \cdot \left( {1 + 17} \right) \cdot \left( {1 + 19} \right) \cdot \left( {1 + 23} \right) \\ &= 836075520 \end{align*}$$
因此递归的深度不会超过 $10$ 层。所以在每一层中,我们可以从小到大来枚举质数 $P_i$,同时对于每个 $P_i$ 也从小到大枚举对应的次幂 $\alpha_i$。为了防止重复搜索,当递归到下一场时我们规定必须从大于 $P_i$ 的质数开始枚举,这样就能保证在得到的约数和中,有 $P_1 < P_2 < \cdots < P_n$。
那么质数 $P_i$ 最大可以枚举到多少呢?首先很容易知道 $P_i$ 一定小于 $S$,因为 $1$ 和 $S$ 本身就是 $S$ 的两个约数,而 $1+S$ 就超过 $S$ 了,因此一定有 $P_i < S$。所以按照上面的做法的,每一层枚举的质数都小于 $S$,由于最多要递归 $9$ 层来枚举,因此即使不考虑枚举 $\alpha_i$,仅是枚举质数的计算量就达到 $\pi^9(S)$ 的级别(其中 $\pi(x)$ 表示不超过 $x$ 的质数的个数)。我们继续看一下还有什么性质。
假设在约数之和的公式中存在某个质因子满足 $P_i \geq \sqrt{S}$,那么该质因子对应的次幂 $\alpha_i$ 一定恰好为 $1$,即对应的项一定是 $1 + P_i^1$ 这个形式,而不可能是 $1 + P_i^1 + P_i^2 + \cdots$ 这个形式。因为即使考虑 $1 + P_i^1 + P_i^2$ 就已经有 $1 + P_i^1 + P_i^2 \geq 1 + \sqrt{S} + S > S$,此时约数之和就必定超过 $S$ 了。
同时还可以发现如果存在某个质因子满足 $P_i \geq \sqrt{S}$,那么该质因子就只能恰好是 $P_n$ 这个最大的质因子。反证法,否则至少存在两个质因子满足 $P_j > P_i \geq \sqrt{S}$,根据上面的结论必然有 $\alpha_i = \alpha_j = \cdots = \alpha_n = 1$,此时的约数之和为
$$\begin{align*}\prod\limits_{i=1}^{n}{\sum\limits_{j=0}^{\alpha_i}{P_i^j}} &= \left( {P_1^0 + P_1^1 + \cdots + P_1^{\alpha_1}} \right) \cdot \left( {P_2^0 + P_2^1 + \cdots + P_2^{\alpha_2}} \right) \cdots \left( {P_i^0 + P_i^1} \right) \cdot \left( {P_j^0 + P_j^1} \right) \cdots \left( {P_n^0 + P_n^1} \right) \\ &> \left( {P_i^0 + P_i^1} \right) \cdot \left( {P_j^0 + P_j^1} \right) \\ &> 1 + P_i + P_j + P_i \cdot P_j \\ &> P_i \cdot P_j \\ &\geq S\end{align*}$$
这就与约数之和为 $S$ 矛盾了。
综合上面的结论,我们得到在约数之和的公式中,最多只会存在一个质因子 $ P_n \geq\sqrt{S}$ (即最大的那个质因子),且对应的次幂一定是 $\alpha_n = 1$。
当 $P_n < \sqrt{S}$,那么 $S = \prod\limits_{i=1}^{n}{\sum\limits_{j=0}^{\alpha_i}{P_i^j}}$。
当 $P_n \geq \sqrt{S}$,有以下两种情况:
- $S = \prod\limits_{i=1}^{n}{\sum\limits_{j=0}^{\alpha_i}{P_i^j}} \ , \ \ n > 1$
- $S = 1 + P_1 \ , \ \ n = 1$
因此当我们枚举质因子 $P_i$ 时只需要枚举到 $\sqrt{S}$ 就可以了,超过 $\sqrt{S}$ 的质因子 $P_n$ 直接进行特判。假设之前枚举的 $n-1$ 个质数得到的累乘结果记为 $\prod\limits_{i=1}^{n-1}{\sum\limits_{j=0}^{\alpha_i}{P_i^j}} = \text{prod}$,由于 $P_n$ 必然是公式中最大的那个质因子,因此如果要满足 $\text{prod} \cdot (1 + P_n) = S$,那么一定有 $P_n = \dfrac{S}{\text{prod}} -1$,同时 $P_n$ 是质数且 $P_n > P_{n-1}, \ P_n \geq \sqrt{S}$。
先给出这种搜索顺序的代码(其实这个搜索代码还是会 TLE):
1 void dfs(int cur, int prod, int num) { 2 if (prod == s) { 3 ans[sz++] = num; 4 return; 5 } 6 int r = s / prod; 7 if (is_prime(r - 1) && r - 1 >= primes[cur] && (r - 1) >= s / (r - 1)) ans[sz++] = num * (r - 1); 8 for (int i = cur; primes[i] <= s / primes[i]; i++) { 9 for (int j = 1 + primes[i], k = primes[i]; j <= s; k *= primes[i], j += k) {10 if (r % j == 0) dfs(i + 1, prod * j, num * k);11 }12 }13 }
先解释以下各个参数的含义,首先 $\text{cur}$ 表示当前从第 $\text{cur}$ 个质数开始枚举。$\text{prod}$ 的定义与上面相同,即之前枚举质数的各项累乘。$\text{num}$ 表示约数之和为 $\text{prod}$ 所对应的那个数,即 $\text{num}$ 的约数之和等于 $\text{prod}$。
很明显当 $\text{prod} = S$,那么此时 $\text{num}$ 就是我们要找的数。
否则我们先判断是否存在质因子 $P_n \geq \sqrt{S}$ 使得 $\text{prod} \cdot (r - 1) = S$,在代码中 $P_n = \dfrac{S}{\text{prod}} -1 = r-1$。如果满足 $r-1$ 是质数,且 $r-1 \geq \text{primes}[\text{cur}], \ r - 1 \geq \sqrt{S}$,那么 $\text{prod} \cdot (r - 1)$ 就是我们要找的答案。
然后再去枚举考虑不超过 $\sqrt{S}$ 的质因子,以及对应的次幂,往下一层递归。
可是这样做还是会超时的,因为计算量大概是 $\pi^9(\sqrt{S})$ 级别。继续对枚举质数的部分进行优化,可以发现在每一层中我们做的事情都是从第 $\text{cur}$ 个质数开始枚举,使得累乘的结果不超过 $r$。类比上面的分析,我们知道枚举的质数肯定要小于 $r$,并且一样可以枚举不超过 $\sqrt{r}$ 的质数,然后超过 $\sqrt{r}$ 的质因子进行特判就可以了,代码就变成下面的样子:
1 void dfs(int cur, int prod, int num) { 2 if (prod == s) { 3 ans[sz++] = num; 4 return; 5 } 6 int r = s / prod; 7 if (is_prime(r - 1) && (r - 1) >= primes[cur]) ans[sz++] = num * (r - 1); 8 for (int i = cur; primes[i] <= r / primes[i]; i++) { 9 for (int j = 1 + primes[i], k = primes[i]; j <= r; k *= primes[i], j += k) {10 if (r % j == 0) dfs(i + 1, prod * j, num * k);11 }12 }13 }
可以发现少了判断条件(r - 1) >= r / (r - 1),这是因为 $r-1$ 一定大于 $\sqrt{r}$。这个搜索代码就可以过了。
至此搜索的部分就已经讲完了,剩下的就只需要筛出不超过 $\sqrt{2 \times 10^9}$ 的所有质数,以及写个判断是否为质数的函数就可以了。
AC代码如下:
1 #include2 using namespace std; 3 4 const int N = 45000; 5 6 int s; 7 int primes[N], cnt; 8 bool vis[N]; 9 int ans[N], sz;10 11 void get_prime(int n) {12 for (int i = 2; i <= n; i++) {13 if (!vis[i]) primes[cnt++] = i;14 for (int j = 0; primes[j] <= n / i; j++) {15 vis[primes[j] * i] = true;16 if (i % primes[j] == 0) break;17 }18 }19 }20 21 bool is_prime(int x) {22 if (x < N) return !vis[x];23 for (int i = 0; primes[i] <= x / primes[i]; i++) {24 if (x % primes[i] == 0) return false;25 }26 return true;27 }28 29 void dfs(int cur, int prod, int num) {30 if (prod == s) { // 搜索得到的质数和 prod 等于 s31 ans[sz++] = num;32 return;33 }34 int r = s / prod; // 要凑的剩余部分35 if (is_prime(r - 1) && (r - 1) >= primes[cur]) ans[sz++] = num * (r - 1); // 先考虑质因子大于 sqrt(r) 的情况36 for (int i = cur; primes[i] <= r / primes[i]; i++) { // 再考虑质因子小于 sqrt(r) 的情况37 for (int j = 1 + primes[i], k = primes[i]; j <= r; k *= primes[i], j += k) { // 枚举质数 i 对应的次幂38 if (r % j == 0) dfs(i + 1, prod * j, num * k);39 }40 }41 }42 43 int main() {44 get_prime(N - 1); // 筛出不超过sqrt(2e9)的质数45 while (~scanf("%d", &s)) {46 sz = 0;47 dfs(0, 1, 1); // 从第0个质数开始枚举搜索48 printf("%d\n", sz);49 if (sz) {50 sort(ans, ans + sz);51 for (int i = 0; i < sz; i++) {52 printf("%d ", ans[i]);53 }54 printf("\n");55 }56 }57 58 return 0;59 }
参考资料
聪明的燕姿:https://www.cnblogs.com/onlyblues/p/15966022.html
关键词:
有监督学习——梯度下降
全球百事通!聪明的燕姿
当前视点!Oracle数据库中没有scott账户的方法
今日热闻!光速破发?iPhone 14黄色版还未开售便降价600元
华硕发布ROG Strix Impact III鼠标:双手通用、可更换微动插槽
真香!重庆购买HUAWEI问界M7直补3万:起售仅25.98万
当前简讯:滴滴快车预付车费什么时候退款_滴滴快车预付车费什么意思
世界通讯!网络安全(中职组)-B模块:Web安全应用-2
今日播报!客服回应疯狂小杨哥带货翻车:有巡查、违规会处罚
怕了吗?长城公布“1000万悬赏计划”:严厉打击网络水军
【世界新要闻】四位计数器testbench的设计
世界滚动:chatgpt 集成飞书实践指南
自以为是 与 思考
天天通讯!伊朗外长:伊沙恢复外交关系将为两国和地区发展注入巨大动能
世界快讯:日系车掀起买一送一热潮:买皓影插混送飞度、买日产楼兰送轩逸
天天热资讯!50万以内最舒适二排 理想L7正式交付:31.98万起售
环球新资讯:10年分红1000多亿!董明珠鼓励员工“砸锅卖铁”买格力股票
剪刀石头布的算法
资讯推荐:全球最强!传音发布260W有线、110无线快充:8分钟充满
世界观热点:美国科学家改变人类科技、终极能源即将实现?真相来了!
世界快讯:《原子之心》更新:添加FOV设置、删除种族主义动画
Shell命令-常用操作2
【质因数分解算法详解】C/Java/Go/Python/JS/Dart/Swift/Rust等不同语言实现
今亮点!霸道女总裁加盟《碟中谍8》
天天播报:00后男生每天下班后卖烤肠解压 50元投资日赚200元:厌恶刷视频、打游戏
【时快讯】网络安全(中职组)-B模块:Web安全渗透测试
环球新消息丨K8S 性能优化-K8S Node 参数调优
环球微速讯:比进口价格便宜!海南三亚榴莲今年6月将大规模上市
当废物挺好?委员称年轻人想躺平更多是调侃 奋斗的是大多数
天天亮点!中国足彩网竞彩11日推荐:曼城取胜无悬念
焦点短讯!使用SSM+Shiro+Layui框架,基于RBAC3模型开发的权限管理系统
snort入侵检测基础概述
当前播报:amusements
环球热议:6月上映!《变形金刚7》角色海报发布:擎天柱、猩猩队长亮相
【速看料】降价潮席卷全国 车企尽数参战是为何?乘联会解答:国六B要来了
观热点:01-C语言概述
环球今热点:真正油电同价!比亚迪投放“深水炸弹”:13.4万买宋Pro DM-i超级混动
环球通讯!立春来首场寒潮横扫我国大部:多地将遭遇滑梯式降温 最高降20℃
【新要闻】活久见!女生家中发现神奇圆柱形手机:登QQ、手电筒、拍照 功能多到炸
读Java性能权威指南(第2版)笔记13_堆内存下
最便宜竖折叠继任者!摩托罗拉Razr 2023真机图出炉:首次拼色后壳
当前快报:汽车价格战新进展:南北大众同日入局 丰田买一辆送一辆
世界速递!day05-功能实现04
Vue————Vue v2.7.14 入口文件【二】
【时快讯】《满江红》中国影史票房榜第6:力压《唐人街探案3》 票房突破45.23亿
环球即时:2023开门红!长四丙成功发射“一箭双星”
环球消息!第一批PCIe 5.0 SSD都是残血!14GB/s满血版还早呢
世界快资讯丨有了ChatGPT 动动嘴就能使唤Excel:我的童年梦想实现了
每日热门:8岁男孩单手打破汉诺塔世界纪录:4.305秒搞定4层
当前头条:海绵宝宝卡通图片线条图_海绵宝宝卡通图片
天生要完美电视剧28集完整版_天生要完美电视剧
对C++做爬虫的代码进行简单分析
世界热推荐:2.HelloSpring
孙海洋夫妇餐饮公司被列经营异常:本人回应
今日报丨香港男子深圳上班每天通勤4小时:月薪3万 每天通勤费用80元
【全球独家】63.C++类型转换
世界今亮点!python可变长参数
当前观察:大获成功!《最后生还者》成史上收视率最高的游戏改编剧
爆款椰子鞋停售后:阿迪在中国凉凉了
1.3kg下颜值、性能、屏幕全给你!华硕灵耀14 2023评测:续航惊人
观热点:长城汽车发布Hi4全新新能源技术:4驱享受 2驱能耗
全球关注:杠上比亚迪秦PLUS DM-i 新款日产轩逸上市:9.98万起
8GB、16GB显存的性能差多少?实测多达172%!
明解数据库------数据库存储演变史
AMD最强核显跑分上来了!但是还打不过GTX 1650 Ti
全球最新:买丰田bZ4X电动车 送一辆威驰轿车?4S店回应:活动属实
RTX 30公版显卡突然集体消失!刚刚降价40%
微头条丨公司规定不接董事长电话1次罚10000元 员工:试岗1天就走了
【全球快播报】校友承诺捐赠1100万元却不兑现被告 学校:他具备履约能力
紧跟微信步伐:支付宝掌纹支付设备外观专利获授权
【天天快播报】搅局中端市场!一加Ace2V评测:将16G满血内存进行到底
通讯!破壁机虚标功率后 疯狂小杨哥带货又翻车:面霜因虚假宣传被罚
《王者荣耀》出海“首战告捷”:登顶巴西免费游戏榜
环球报道:记录--vue3+setup+ts 知识总结
【世界速看料】程序员养发神器:拒绝加班熬夜,告别秃头!
【世界聚看点】【希尔排序ShellSort算法详解】Java/Go/Python/JS/C不同语言实现
环球微头条丨【分享贴】项目中为啥总是项目经理一人干着急?
使用PostgreSQL而不是MySQL存储中型数据有什么好处?
3000块多品牌SSD质量大PK:整体比机械硬盘可靠
玩家购入二手Switch主机:可是被卖家坑惨了
航班晚点1小时 机长提速提前20分钟到达帮助乘客换机?山航回应
每人1600元!北京发放首批“京彩·绿色”消费券:买手机PC都能用
当前热文:涉及121万辆!我国2022年新能源汽车召回量创历史新高:电池、电机缺陷多
环球最资讯丨暴风的恋人百度云_暴风的恋人
有监督学习——线性回归
禁用XXE处理漫谈
腾讯-广点通转化归因
来真的!贾跃亭:3月30日生产FF91 百万豪车来了
【天天新视野】30个汽车品牌降价 成都发放消费券:满40万可减8000元
【世界独家】华硕发布TUF Gaming M3 Gen II鼠标:仅重59g、IP56防尘防水
全球今亮点!过期1天的食物还能吃吗?
日系中的另类!国产马自达CX-50内饰发布:原汁原味引入海外版
加速资源整合,星纪魅族围绕手机、XR、前瞻技术拓展智能生态
Prompt-Engineering-Guide 学习摘要2
今日关注:电动汽车综合检测
观焦点:这几个群,程序员可千万不要进!
每日快讯!12万元买宝马“3系”?宝马中国回应降价传闻:指导价没变
当前快讯:玩家不满《魔戒:咕噜》新宣传片:他没有主角光环!
环球热讯:小米搞出“新花样”:可层叠摄像模组专利获授权
焦点快报!没有秘密了!AI或能够读取大脑重现梦境