素数c#
我是C#的新手。我想编写一些类似的程序,如果用户在文本框中输入任何整数,在列表框中显示素数。(这意味着,如果他们写10,它将显示0-10之间的素数,或0-20之间的20,等等) 在编程之前,我应该先考虑什么? 我知道互联网上有很多例子,但首先我想知道我需要什么 谢谢你的提示;-) === 谢谢各位。所以你是说最好先在控制台应用程序中执行? 我用控制台应用程序做了一个“For-Loop”的例子,这是一个非常简单的例子,但是当我试图在Windows窗体应用程序中实现它时,我不知道如何实现它。 我担心如果我继续在控制台上做示例,那么在Windows窗体应用程序中就很难做到这一点。 你觉得怎么样 ====== 您好 我需要一些关于我的代码的反馈:素数c#,c#,primes,C#,Primes,我是C#的新手。我想编写一些类似的程序,如果用户在文本框中输入任何整数,在列表框中显示素数。(这意味着,如果他们写10,它将显示0-10之间的素数,或0-20之间的20,等等) 在编程之前,我应该先考虑什么? 我知道互联网上有很多例子,但首先我想知道我需要什么 谢谢你的提示;-) === 谢谢各位。所以你是说最好先在控制台应用程序中执行? 我用控制台应用程序做了一个“For-Loop”的例子,这是一个非常简单的例子,但是当我试图在Windows窗体应用程序中实现它时,我不知道如何实现它。 我担心
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);
}
}
Console.WriteLine(“请输入您的整数:”);
长整数;
yourInteger=Int32.Parse(Console.ReadLine());
//显示第一个素数并将其与给定整数进行比较
对于(长i=2;i您需要知道:
- 如何从Windows应用程序读取用户输入
- 如何在一个范围内生成素数
- 如何以您想要的方式写入输出
我强烈建议你把这些任务分开。一旦你把它们分开,你就可以把它们放在一起了。(Marc建议为素数部分编写一个控制台应用程序——如果你还不想进入单元测试领域,这是一个很好的建议。如果你在其他语言中使用过单元测试,那么启动和运行起来相当容易。不过,控制台应用程序肯定会更快。)
理论上,对于可能长期运行的任务(例如,用户输入1000000作为第一个数字),您通常应该使用后台线程来保持UI的响应。但是,首先我会忽略这一点。请注意,在计算素数时,您的应用程序将显示为“挂起”,但首先要让它工作起来。一旦你对这个简单的版本有信心,如果你觉得有冒险精神,你可以看看《BackgroundWorker》之类的东西。好吧,首先我要考虑如何找到素数,然后把它写在一个控制台应用程序中,它可以读一行,做数学运算,并写出结果(纯粹是因为这是您可以做的最简单的事情,并且涵盖了稍后需要的相同解析等逻辑)
当您对素数生成感到满意时,再看看如何进行winforms—如何在窗体上放置列表框、文本框和按钮;如何处理(按钮的)单击事件,以及如何从文本框读取并将值写入列表框。您的素数代码应该可以接受“原样”
如果您还没有IDE,请注意,它是免费的,将涵盖上述所有内容。这里有一个很棒的“朴素”素数算法,非常适合您的需要:
以下是对编辑的回应:
谢谢各位。你们是说最好先在控制台应用程序中执行?我做了一个“For循环”的例子使用控制台应用程序是一个非常简单的应用程序,但是当我尝试在Windows窗体应用程序中执行它时,我不确定如何实现它。我担心如果我继续在控制台中执行示例,那么我将很难在Windows窗体应用程序中执行它。你认为如何
如果您想将素数表示为windows窗体应用程序,则还需要为其设计用户界面。对于要解决的这样一个小问题来说,这有点过头了。您可以做的最简单的设计是在表单()中填写
如果你真的很喜欢学习Windows窗体或WPF,那么有很多方法可供选择。我在博客上讨论了如何使用创建素数:
代码看起来像这样
public IEnumerable<long> 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上找到
代码是“按原样”的,因此您应该查看它以确定它是否适合您的需要,是否需要添加错误检查等,因此请将其作为示例处理。我最近编写了一个例程来实现Eratosthenes的筛选,并遇到了此线程。仅针对存档,以下是我的实现:
static List<int> GetPrimeNumbers(int maxNumber)
{
// seed the master list with 2
var list = new List<int>() {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<int>(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;
}
静态列表GetPrimeNumber(int maxNumber)
{
//在主列表中添加2个种子
var list=new list(){2};
//从3开始,建立完整的列表
var-next=3;
虽然(下2个)永远不是素数,但忽略偶数
如果(下一个%2!=0)
列表。添加(下一步);
next++;
}
//创建列表副本以避免重新索引
var primes=新列表(列表);
//索引从1开始,因为2从未被删除
for(int i=1;iprimes.Contains(a)&&a>乘数)
.ForEach(a=>primes.Remove(a*乘数));
}
返回素数;
}
你可以用“1,2”作为种子如果你的素数列表中需要1,你的方法是完全错误的。素数是绝对的,永远不会改变。你最好的办法是预先生成一个长素数列表。然后想出一个算法,快速查找该数字以确定它是否在列表中。在你的情况下(因为您希望列出给定范围内的所有内容,所以只需这样做即可)。此解决方案将比运行时执行的任何质数查找算法快得多。如果输入的整数大于您的列表,则您始终可以从该点开始执行算法。我认为您应该标记该短语“一开始我会忽略这一点”和“勇敢的,好的answe”
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();
}
}