题目
阴天傍晚车窗外
未来有一个人在等待
向左向右向前看
爱要拐几个弯才来
我遇见谁会有怎样的对白
我等的人他在多远的未来
我听见风来自地铁和人海
我排着队拿着爱的号码牌
城市中人们总是拿着号码牌,不停寻找,不断匹配,可是谁也不知道自己等的那个人是谁。可是燕姿不一样,燕姿知道自己等的人是谁,因为燕姿数学学得好!燕姿发现了一个神奇的算法:假设自己的号码牌上写着数字S,那么自己等的人手上的号码牌数字的所有正约数之和必定等于S
所以燕姿总是拿着号码牌在地铁和人海找数字(喂!这样真的靠谱吗)可是她忙着唱《绿光》,想拜托你写一个程序能够快速地找到所有自己等的人。
(莫名唱了起来= =)
INPUT
输入包含k组数据(k<=100)对于每组数据,输入包含一个号码牌S(S<=10^9)
OUTPUT
对于每组数据,输出有两行,第一行包含一个整数m,表示有m个等的人,第二行包含相应的m个数,表示所有等的人的号码牌。
注意:你输出的号码牌必须按照升序排列。
SAMPLE
INPUT
42
OUTPUT
3
20 26 41
解题报告
考试的时候,一看就知道A不了,打了个极其暴力的程序= =
结果显然= =
正解则是个很神奇的东西
唯一分解定理:任何大于1的自然数,都可以唯一分解成有限个质数的乘积
即:n=p1^k1×p2^k2…×pa^ka
那么何不预处理出来一大圈质数,然后dfs出唯一分解式呢
n=p1^k1×p2^k2..×pa^ka
因数和即可表示成(p1+p1^2+…+p1^k1)…
那么我们就可以dfs了
(我实在不会数学啊QAQ)
ps:本来想打Miller-Rabin的,然后就gg了QAQ