#1137. k 重完全数

k 重完全数

试题描述

一个数n为k重完全数,当且仅当S(n)=k*n,S(n)表示n的所有约数之和,如6就是一个2重完全数,因为6的约数(即能被6整除的自然数)为1、2、3、6,所以S(6)=1+2+3+6=2*6。现在需要你找出1到n之间所有的k重完全数。

输入要求

输入数据仅有一行包含两个整数n和k。其中n≤50000,k<5。

输出要求

按从小到大的次序依次输出求得的k重完全数,每行输出一个数。

输入样例

100 2

输出样例

6

28

知识点及提示

本题的关键是求一个自然数的约数和,我们知道约数都是成对出现的,如12的约数有3对,依次为(1,12)、(2,6)和(3,4),每对约数的乘积都等于12,也就是说如果j是12的约数,则它的另一半就是12 div j。下面给出基于这一思想的求i的约数和s的程序段,通过穷举每对约数中较小的数实现。