请编写程序,输入正整数n,1<n<50000, 输出小于n的所有完全数、亲密数、水仙花数、阶乘和数、自守数、孪生素数,黑洞数。完全数是恰好等于自身的因子之和的数,如6是,因为6=1*2*3=1+2+3; 亲密数是两个正整数,每个全部因子之和等于对方(因子中只不计本身),如220和284是,因为220的全部因子是1,2,4,5,10,11,20,22,44,55,110,和为284,而284的全部因子是1,2,4,71,142,和为220;水仙花数是恰好等于自身各位数字立方和的数,如153是,因为153=13+53+33;阶乘和数是恰好等于自身各位数字阶乘的和的数,如145是,因为145 = 1!+4!+5!;自守数是平方后尾部数字是自身的数,如9376是,因为93762=87909376; 孪生素数是差2的两个素数,如197和199。黑洞数又称陷阱数,是经有限次“重排求差”操作达到的不再改变的数,“重排求差”操作是将组成一个数的各位数字重排得到的最大数减去最小数,例如207,“重排求差”操作序列是:720-027=693,963-369=594,954-459=495,再做下去不变了。再用208算一次,也停止到495,所以495是三位黑洞数。
提示:一般都可以用枚举法求解,即按照定义检查一定范围内的所有数。
只有黑洞数打不出来了,求大神帮忙,用C++实现