Помогите разобраться в этом "простом примере" из Шилдта
// Простой пример применения параметра.
using System;
class ChkNum
{
// Возвратить значение true, если значение
// параметра х окажется простым числом.
public bool IsPrime(int x)
{
if (x <= 1) return false;
for (int i = 2; i <= x / i; 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 + " простое число.");
else Console.WriteLine(i + " непростое число.");
}
}
Вот какой результат дает выполнение этой программы.
2 простое число.
3 простое число.
4 непростое число.
5 простое число.
6 непростое число.
7 простое число.
8 непростое число.
9 непростое число.
сначала идет цикл For из класса parmdemo и он передает начальное значение 2 в IsPrime который использует его как X
далее начинается проверка, X>1 и return не срабатывает
потом начинается цикл for (int i=2; i <= x/i; i++)
и я никак не могу понять как цикл выполняется, если i <= x/i !!!!
получается 2<=2/2 или 2<=1
что за бред
по идее при таком условии цикл вообще не должен исполняться
идем далее, начинается условие if
у нас x=2, i тоже равна 2, получается 2/2 число делится без остатка, то есть условие if((x %i) == 0) выполняется
и если if((x %i) == 0) return false; то значение false передается в
if(ob.IsPrime(i)) Console.WriteLine(i + " простое число.");
else Console.WriteLine(i + " непростое число.");
if(ob.IsPrime(i)) можно интерпретировать как if(ob.IsPrime(i)==true), но у нас ведь передалось значение false, значит выполняется следующая строка else Console.WriteLine(i + " непростое число.");
но это ведь не так и 2 это простое число!
Объясните пожалуйста!