我无法理解以下素数程序中“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"循环,即我在那里注释了一个句子。

你能通过调试来解释一下吗?

我无法理解以下素数程序中“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,并且你已经在周期的早期检查了该除数。