C语言 - 1000以内的完数
/*
一个数如果恰好等于它的真因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而
6 = 1 + 2 + 3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其真因子:
6 its factors are 1,2,3
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
int num_int = 1001;//num从3遍历到1000//number
int fac_inta[1000];//真因子//factor
int main(int argc, char const *argv[])
{
SetConsoleCP(65001);
SetConsoleOutputCP(65001);//调整终端字符编码方式
while(--num_int >= 3)
{
int sum_int = 0;
int facnum_int = 0; //factor number
for (int try_int = 1; try_int <= (int)(sqrt(num_int)); ++try_int)
//寻找(真)因子
{
if (num_int % try_int == 0)
{
sum_int += (num_int / try_int + try_int);
fac_inta[facnum_int] = try_int;
facnum_int++;
if (facnum_int != 1)
{
fac_inta[facnum_int] = num_int / try_int;
facnum_int++;
}
}
}
sum_int -= num_int;//剔除本身(非真因子)
if (sum_int == num_int)
{
printf("%d its factors are 1", num_int);
for (int facindex_int = 1; facindex_int < facnum_int;
++facindex_int) //factor index
{
printf(",%d", fac_inta[facindex_int]);
}
printf("\n\n");
}
}
system("pause");
return 0;
}