遍历确实是最简单的方法了,根据条件求完数,代码如下(根据所求数的递增,运算速度会变的非常慢): ///
/// 获取自然数以内的完数
///
/// 例如 1000 内
///
protected string GetPerfectNumber(int number)
{
string returnStr = "";
int i, j, k, h, s, sum;
int[] a = new int[number]; // 存储因数
sum = 0;
// 遍历 1000 内数据
for (i = 2; i <= number; i++)
{
s = 0;
k = 0;
for (j = 1; j < i; j++)
{
// 判断是否是当前数字的因数,并存储
if (i % j == 0)
{
a[k] = j;
k++;
}
}
// 遍历已存储的因数累加求和
for (h = 0; h < k; h++)
{
s += a[h];
}
// 相等则是完数
if (i == s)
{
returnStr = returnStr + i + ",";
sum++;
}
}
if (sum > 0)
{
returnStr = number + "以内完数有" + sum + "个,分别是:" + returnStr.Substring(0, returnStr.Length - 1) + "。";
}
else
{
returnStr = number + "以内没有完数。";
}
return returnStr;
}
static void Main(string[] args)
{
for (int i = 1; i < 1000; i++)
{
//获得所有因子 不包含自身,添加到集合中
List
for (int j = 1; j < i; j++)
{
if (i % j == 0)
{
list.Add(j);
}
}
//为集合所有元素求和
int sum = 0;
for (int k = 0; k < list.Count; k++)
{
sum += list[k];
}
if (sum == i)
{
Console.WriteLine("[{0:D3}]是完数。", i);
}
}
Console.ReadLine();
}
//结果只有 6 、28 、496三个
遍历?不需要思考的算法