Выполняется ли условие в цикле - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д