我試圖解決歐拉項目的問題3,發現here.我想通過使用Eratosthene的篩子生成一個子列表來解決這個問題(找到了here.我完全沒有完成這個問題,但我遇到了一個小問題...通過Eratosthene的篩子生成素數#
下面是我的代碼,我一直在這樣做,但是,當我運行此代碼時,它阻止我的電腦,並輸出一個2,然後再拖延一些。它顯然正在運行,但它似乎沒有做正確的。在它輸出列表之前,它應該讓我知道(只是檢查掛斷是否在輸出之前)它已完成分配列表...
如果你不確定發生了什麼事情,你可以給我一些指導,幫助他們挖掘代碼並調試其不同的代碼行嗎?我已經在不同的領域嘗試過Console.WriteLine,但它似乎沒有迴應代碼。
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
static void Main(string[] args)
{
long maxNum = 100;
double maxSqrt = Math.Floor(Math.Sqrt(maxNum));
long basePrime;
// Make a list from 2 to maxNum
List<long> numberList = new List<long>();
List<long> sievedList = new List<long>();
for (long i = 2; i <= maxNum; i++) numberList.Add(i);
// Evaluate the first number of the list, if it is < maxSqrt skip it, create a list of multiples and Except them from numberList, else, numberList is completely Prime Factors
foreach (long number in numberList.Skip(1))
{
basePrime = numberList[0];
Console.WriteLine(basePrime);
while (number < maxSqrt)
{
if (number % basePrime == 0)
{
sievedList.Add(number);
}
numberList = numberList.Except(sievedList).ToList();
sievedList.Clear();
}
}
Console.WriteLine("Finished Allocating Primes");
numberList.ForEach(Console.WriteLine);
}
}
maxSqrt不應該改變,除非maxNum改變。我的印象是,一個數字的平方根是它的因素最高的因素,並且仍然可能是最重要的。 – RaineAndrews
你現在應該開始學習使用調試器了。它會在你的'while'循環中發現錯誤的時間比你在這裏創建你的問題少得多。單步執行代碼可以教你很多更好的編寫代碼的方法。你永遠不會改變'number',所以它總是保持爲<
那麼,while循環實際上並不會改變它的值,因爲在數字大於maxSqrt之前數字不會改變? – RaineAndrews