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