Выполняется ли условие в цикле - 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;  
  }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы