項目歐拉challenge 23美國這樣的:項目歐拉#23在C#
一個完美的編號是針對其適當除數的總和正好等於號。例如,28的適當因數的和將是1 + 2 + 4 + 7 + 14 = 28,這意味着28是一個完美的數字。
如果n的合適除數之和小於n,則n稱爲不足,如果和超過n,則稱n爲大數。
由於12是最小的豐富數字,1 + 2 + 3 + 4 + 6 = 16,可以寫成兩個豐富數字之和的最小數字是24.通過數學分析,可以看出所有大於28123的整數都可以寫成兩個豐富數字的總和。然而,即使知道不能表示爲兩個豐富數的總和的最大數小於該極限,也不能通過分析進一步減少該上限。
查找所有不能寫成兩個豐富數字之和的正整數的和。
所以我一直在試圖得到這個工作,但是我不斷收到回一個不正確的結果,我不知道在哪裏,這是在代碼中去錯了,雖然我有:
static void Main(string[] args)
{
List<int> abundantNums = Enumerable.Range(12, 1000000).Where(i => isAbundant(i)).ToList();
abundantNums = abundantNums.Distinct().ToList();
var boolArr = new bool[28124];
for (int i = 0; i < abundantNums.Count; ++i)
{
for (int j = i; j < abundantNums.Count; ++j)
{
var sum = abundantNums[i] + abundantNums[j];
if (sum < 28124) boolArr[sum] = true;
else break;
}
}
var total = 0;
for (int i = 0; i < boolArr.Length; i++)
{
if (boolArr[i] == false)
{
total += i;
}
}
Console.WriteLine(total);
Console.ReadKey();
}
static bool isAbundant(int num)
{
if (getFactors(num).Sum() > num)
{
return true;
}
else
{
return false;
}
}
然後找了好幾個因素,我有:
static List<int> getFactors(int num)
{
List<int> factors = new List<int>();
Stopwatch watch = Stopwatch.StartNew();
for (int i=1; i < Math.Sqrt(num) + 1; i++)
{
if (num % i == 0)
{
factors.Add(i);
if (num/i != i)
{
factors.Add(num/i);
}
}
}
watch.Stop();
factors.Remove(num);
return factors;
}
現在我已經在這了一兩天,而據我所知這應該做的伎倆,任何人都更聰明,比我能夠指出我的失敗?
請同時陳述問題陳述。 –
你會得到什麼結果,你期望什麼? – BugFinder
4178816是我得到的結果,我不確定我期待什麼,因爲我不知道正確的答案,我只知道它說這是不正確的 – Coombes