我无法理解以下素数程序中“for”循环的流程.请解释一下
本文关键字:循环 解释 一下 程序 for | 更新日期: 2023-09-27 18:32:30
以下是使用"for"循环查找素数的代码。
using System;
class ChkNum
{
// Return true if x is prime.
public bool IsPrime(int x)
{
if (x <= 1) return false;
for (int i = 2; i <= x / i; i++)//didn't understand the condition (i<=x/i)
if ((x % i) == 0) return false;
return true;
}
}
class ParmDemo
{
static void Main()
{
ChkNum ob = new ChkNum();
for (int i = 2; i < 10; i++)
if (ob.IsPrime(i)) Console.WriteLine(i + " is prime.");
else Console.WriteLine(i + " is not prime.");
}
}
上面的代码是查找素数,请解释 for 循环的流程。
上述代码的输出为
2 是素数。3 是素数。4 不是素数。5 是素数。6 不是素数。7 是素数。8 不是素数。9 不是素数
我在代码中输入值并进行了调试,但我只在那里遇到了问题,首先是"for"循环,即我在那里注释了一个句子。
你能通过调试来解释一下吗?
我能理解你的困惑。
该程序正在实施试验划分方法来测试素数。
此例程包括将 n 除以大于 1 且小于或等于 n 的平方根的每个整数 m。
如上所述,i <= x / i
条件只是检查i <= Math.Sqrt(x)
的奇怪方法。
这样写会更清晰(总体上更好)
for (int i = 2, max = (int)Math.Sqrt(x); i <= max; i++)
{
// ...
}
你可以跳过所有除数i > x / i
因为当你在这样的 i 上除以 x 时,除法结果将是 <= i,并且你已经在周期的早期检查了该除数。