Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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,我需要制作一个GUI应用程序,当用户输入两个数字时检查素数。标准是我创建了两种方法,一种是检查一个数字是否为素数,另一种是我的isPrime(int n),另一种是检查两个输入中哪一个较低/较高,以便程序知道从何处开始 我做不到这一点。当我运行脚本时,Listbox中没有任何输出 到目前为止,我的代码是: private void button1_Click(object sender, EventArgs e) { int num1, num2; num1 = Int32.Pa

我需要制作一个GUI应用程序,当用户输入两个数字时检查素数。标准是我创建了两种方法,一种是检查一个数字是否为素数,另一种是我的
isPrime(int n)
,另一种是检查两个输入中哪一个较低/较高,以便程序知道从何处开始

我做不到这一点。当我运行脚本时,Listbox中没有任何输出

到目前为止,我的代码是:

private void button1_Click(object sender, EventArgs e)
{
    int num1, num2;
    num1 = Int32.Parse(textBox1.Text);
    num2 = Int32.Parse(textBox2.Text);

    for (int i = num1; i <= num2; i++) //Method that checks which of the two inputs is lower/hihger
    {
        if (isPrime(i))
        {
            for (int j = 2; j <= 1 / 2; j++)
            {
                if (i % j == 0)
                {
                    break;
                }
            }
            if (i == 0 && i != 1)
            {
                listBox1.Items.Add(i);
            }
        }
    }
}

private static bool isPrime(int n) //Method to check prime numbers
{
    for (int i = 2; i < n; i++)
    {
        if (n % i == 0)
        {
            return false;
        }
    }
    return true;
}
private void按钮1\u单击(对象发送者,事件参数e)
{
int num1,num2;
num1=Int32.Parse(textBox1.Text);
num2=Int32.Parse(textBox2.Text);

对于(int i=num1;i您的
isPrime
函数是正确的,您只需要对
i的更新条件做一个小小的更改,让我们从
isPrime
开始。因为它以
int n
作为参数,
n
可以达到
int.MaxValue~2_000_000
; 20亿次迭代太多了,因为我们可以轻松地使用
sqrt(2_000_000_000)/2~30_000
循环实现例程:

    private static bool isPrime(int n) {
      if (n <= 1)
        return false;
      else if (n % 2 == 0)
        return n == 2;

      int max = (int)(Math.Sqrt(n) + 0.5);

      for (int divisor = 3; divisor <= max; divisor += 2)
        if (n % divisor == 0)
          return false;

      return true;   
    }     

请注意,由于我们已经优化了
isPrime
,我们可以保持
for
循环非常简单。

只是为了给问题添加另一个视图:

我根本不会在这里检查(就像在“计算”中)素数

Int32包含数量相当有限的素数,这使我们可以预计算,甚至可以从internet下载列表(如果可以找到)


一旦我们有了它,您所需要做的就是查找恰好在所需范围内的输入。

j您能解释一下“检查两个输入中哪一个更低/更高的方法”吗循环?我不知道它应该如何工作,也不知道它对被标识为较低或较高的一个有什么作用。目标是将num1和num2之间的所有素数放入一个列表框吗?@GuyIncognito是的,先生!j您不会得到输出,因为
if(I==0&&I!=1)
永远不会是真的。你确实意识到这是非常低效的,是吗?(考虑到OP对
iPrime
)的实现@Fildor我看不到任何其他方法可以做到这一点…抱歉,搜索“”你甚至可以在这里找到一些:,@Fildor,谢谢,伙计,我已经添加了一个链接。还添加了另一个链接,因为它肯定会帮助更多。
    private static bool isPrime(int n) {
      if (n <= 1)
        return false;
      else if (n % 2 == 0)
        return n == 2;

      int max = (int)(Math.Sqrt(n) + 0.5);

      for (int divisor = 3; divisor <= max; divisor += 2)
        if (n % divisor == 0)
          return false;

      return true;   
    }     
    for (int i = num1; i <= num2; ++i)
      if (isPrime(i))
        listBox1.Items.Add(i);