Выполняется ли условие в цикле - C#
Формулировка задачи:
Учебная программа взята из книги Шилдта. Программа определяет простые числа до 9 включительно,
а также находит наименьший общий множитель для нескольких заданных чисел.
Однако программу я немного модифицировал, потому что результат прогона не совпадал с тем, что было в книжке на картинке (простые числа начинались с 2, а не с 1):
if (x <1) return false; //исправлено, было x<=1
max = a < b ? b : a; //исправлено, было max = a < b ? a: b
for (int i = 1; i <10; i++)//исправлено, было for (int i = 2; i <10; i++)
В таком варианте программа работает нормально.
Однако меня смущает следующее условие в IsPrime:
for (int i =2; i<=x/i; i++)
По моему i<=x/i не всегда выполняется, но тем не менее программе это не мешает.
Объясните, пожалуйста, в чем моя ошибка.
И еще...это уже просто ради праздного любопытства:
Это условие вообще можно сделать таким: i<=x/-0.0. Правильно от этого программа работать не начнет, но и компилятор тоже не ругается. Результат деления воспринимается как отличный от нуля, поэтому компилятор и не выдает ошибку?
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++)
if ((x%i)==0) return false;
return true;
}
// Return the least common factor.
public int LeastComFactor(int a, int b)
{
int max;
if (IsPrime(a) || IsPrime(b)) return 1;
max = a < b ? b : a; //исправлено
for (int i = 2; i <= max / 2; i++)
if (((a % i) == 0) && ((b % i) == 0)) return i;
return 1;
}
}
class ParmDemo
{
static void Main()
{
ChkNum ob = new ChkNum();
int a, b;
for (int i = 1; i <10; i++)//исправлено
if (ob.IsPrime(i)) Console.WriteLine(i + " is prime.");
else Console.WriteLine(i + " is not prime.");
a = 7;
b = 8;
Console.WriteLine("Least common factor for " +
a + " and " + b + " is " +
ob.LeastComFactor(a, b));
a = 100;
b = 8;
Console.WriteLine("Least common factor for " +
a + " and " + b + " is " +
ob.LeastComFactor(a, b));
a = 100;
b = 75;
Console.WriteLine("Least common factor for " +
a + " and " + b + " is " +
ob.LeastComFactor(a, b));
}
}Решение задачи: «Выполняется ли условие в цикле»
textual
Листинг программы
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;
}