Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
素数c#_C#_Primes - Fatal编程技术网

素数c#

素数c#,c#,primes,C#,Primes,我是C#的新手。我想编写一些类似的程序,如果用户在文本框中输入任何整数,在列表框中显示素数。(这意味着,如果他们写10,它将显示0-10之间的素数,或0-20之间的20,等等) 在编程之前,我应该先考虑什么? 我知道互联网上有很多例子,但首先我想知道我需要什么 谢谢你的提示;-) === 谢谢各位。所以你是说最好先在控制台应用程序中执行? 我用控制台应用程序做了一个“For-Loop”的例子,这是一个非常简单的例子,但是当我试图在Windows窗体应用程序中实现它时,我不知道如何实现它。 我担心

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

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

谢谢你的提示;-)

=== 谢谢各位。所以你是说最好先在控制台应用程序中执行? 我用控制台应用程序做了一个“For-Loop”的例子,这是一个非常简单的例子,但是当我试图在Windows窗体应用程序中实现它时,我不知道如何实现它。 我担心如果我继续在控制台上做示例,那么在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();
   }
}