c#一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.找出1000以内的所有完数

如题所述

遍历确实是最简单的方法了,根据条件求完数,代码如下(根据所求数的递增,运算速度会变的非常慢): /// <summary>
/// 获取自然数以内的完数
/// </summary>
/// <param name="number">例如 1000 内</param>
/// <returns>所有完数</returns>
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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-07
static void Main(string[] args)
{
for (int i = 1; i < 1000; i++)
{
//获得所有因子 不包含自身,添加到集合中
List<int> list = new List<int>();
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三个本回答被提问者采纳
第2个回答  2014-02-06
遍历?不需要思考的算法
相似回答