素数c#

我是C#的新手。 我想编写类似的东西,如果用户将在文本框中输入任何整数,则在列表框中显示素数。 (这意味着,如果他们写10,它将显示0-10的素数,或0-20的20,等)。

在编程之前,我应该首先考虑什么? 我知道互联网上有很多例子,但首先我想知道我需要什么?

谢谢你的提示;-)

===谢谢你们。 所以你建议最好先在Console应用程序中做到这一点? 我使用控制台应用程序做了一个非常简单的“For Loop”示例,但是当我尝试在Windows窗体应用程序中执行它时,我不确定如何实现它。 我担心如果我继续在控制台中做示例,那么我将很难在Windows Form Apps中执行此操作。 你怎么看?

======再次问好,

我的代码需要一些反馈:

Console.WriteLine("Please enter your integer: "); long yourInteger; yourInteger = Int32.Parse(Console.ReadLine()); //displaying the first prime number and comparing it to the given integer for (long i = 2; i <= yourInteger; i = i + 1) { //Controls i if its prime number or not if ((i % 2 != 0) || (i == 2)) { Console.Write("{0} ", i); } } 

好吧,首先我会考虑如何找到素数,然后在一个控制台应用程序中写入,读取一行,进行数学运算并写出结果(纯粹因为这是你能做的最简单的事情,并且涵盖了你以后需要的解析等逻辑。

当您对素数生成感到满意时,请查看如何进行winforms – 如何在表单上放置列表框,文本框和按钮; 如何处理(按钮的)click事件,以及如何从文本框中读取并将值写入列表框。 您的主要代码应该可以“按原样”采取……

如果您还没有IDE,请注意C#Express是免费的,并且将涵盖以上所有内容。

你需要知道:

  • 如何从Windows应用程序中读取用户输入
  • 如何在一个范围内生成素数
  • 如何以您想要的方式编写输出

我强烈建议您将这些任务分开。 一旦你让他们每个人分开工作,你就可以把它们放在一起。 (Marc建议为素数部分编写一个控制台应用程序 – 如果您不想进行unit testing,这是一个很好的建议。如果您使用其他语言的unit testing,那么它很容易启动和运行NUnit 。控制台应用程序肯定会更快开始使用。)

理论上,对于可能长时间运行的任务(例如,用户输入1000000作为第一个数字),您通常应该使用后台线程来保持UI响应。 但是,我会先忽略它。 请注意,当您计算素数时,您的应用程序将显示为“挂起”,但首先让它工作。 一旦您对简单版本充满信心,如果您有冒险精神,可以查看BackgroundWorker等。

我在博客上讨论了使用Sieve of Eratosthenes创建素数:

http://blogs.msdn.com/mpeck/archive/2009/03/03/Solving-Problems-in-CSharp-and-FSharp-Part-1.aspx

代码看起来像这样……

 public IEnumerable GetPrimes(int max) { var nonprimes = new bool[max + 1]; for (long i = 2; i <= max; i++) { if (nonprimes[i] == false) { for (var j = i * i; j <= max; j += i) { nonprimes[j] = true; } yield return i; } } } 

使用此代码,您可以编写这样的语句......

 var primes = SieveOfEratosthenes.GetPrimes(2000); 

...获得高达2000的IEnumerable素数。

所有代码都可以在CodePlex上找到,url为http://FSharpCSharp.codeplex.com 。

代码是“按原样”,因此您应该查看它以确定它是否适合您的需要,是否需要添加错误检查等,因此将其视为样本。

这是一个伟大的“天真”素数算法,非常适合您的需求: http : //en.wikipedia.org/wiki/Sieve_of_Eratosthenes

以下是对编辑的回复:

多谢你们。 所以你建议最好先在Console应用程序中做到这一点? 我使用控制台应用程序做了一个非常简单的“For Loop”示例,但是当我尝试在Windows窗体应用程序中执行它时,我不确定如何实现它。 我担心如果我继续在控制台中做示例,那么我将很难在Windows Form Apps中执行此操作。 你怎么看?

如果要将素数作为Windows窗体应用程序呈现,则还需要为其设计用户界面。 对于要解决的这么小的问题来说,这有点过分。 您可以做的最简单的设计是填写表单中的ListBox ( 示例 )。

如果您真的热衷于学习Windows窗体或WPF,那么有几种资源可用于此。

 using System; class demo { static void Main() { int number; Console.WriteLine("Enter Number you Should be Checked Number is Prime or not Prime"); number = Int32.Parse(Console.ReadLine()); for(int i =2;i { if(number % i == 0) { Console.WriteLine("Entered number is not Prime"); break; } } if(number % i !=0) { Console.WriteLine("Entered Number is Prime"); } Console.ReadLine(); } } 

我最近编写了一个实现Sieve Of Eratosthenes的例程并遇到了这个post。 仅针对档案,这是我的实施:

  static List GetPrimeNumbers(int maxNumber) { // seed the master list with 2 var list = new List() {2}; // start at 3 and build the complete list var next = 3; while (next <= maxNumber) { // since even numbers > 2 are never prime, ignore evens if (next % 2 != 0) list.Add(next); next++; } // create copy of list to avoid reindexing var primes = new List(list); // index starts at 1 since the 2's were never removed for (int i = 1; i < list.Count; i++) { var multiplier = list[i]; // FindAll Lambda removes duplicate processing list.FindAll(a => primes.Contains(a) && a > multiplier) .ForEach(a => primes.Remove(a * multiplier)); } return primes; } 

如果你在素数列表中需要1,你总是可以用“1,2”播种。

你的方法是完全错误的。 素数是绝对的,永远不会改变。 您最好的选择是预先生成一长串素数。 然后提出一种算法来快速查找该数字以确定它是否在列表中。 然后在你的情况下(因为你想列出给定范围内的所有内容,只需这样做)。 此解决方案将比在运行时实施的任何素数查找算法快得多。 如果输入的整数大于列表,那么您始终可以从该点开始实施算法。