Программа из книги Шилдта, небольшая загвоздка) - C#

Узнай цену своей работы

Формулировка задачи:

Привет!) В книге Шилдта при объяснении методов с параметрами есть пример, в котором находится наименьший множитель двух чисел. Все просто, и код я понимаю, но программа не работает при условии, что одно из чисел равно 3. Вопрос: это я тупой или программ не предусмотрела это?) На всякий вложу сюда всю программу:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ParamTest1
{
    class IsPrimeTest
    {
        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;
        }
        public int LeastComFactor (int a, int b)
        {
            int max;
            if (IsPrime(a) || IsPrime(b)) return 1;
 
            max = a < b ? a : b;
 
            for (int i = 2; i <= max/2; i++) //Вот тут, 3 пополам будет 1, и оператор for не выполняется
            {
                if (((a % i) == 0) && ((b % i) == 0) ) return i;
            }
            return 1;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IsPrimeTest ob = new IsPrimeTest();
            for (int i = 2; i < 10; i++)
                if (ob.IsPrime(i)) Console.WriteLine("Число " + i + " простое");
                else Console.WriteLine("Число " + i + " непростое");
 
            int a = 45; int b = 3;
            Console.WriteLine("Наименьший общийн множитель числе " + a + " и " + b + " равен " + ob.LeastComFactor(a, b));
 
            Console.ReadKey();
        }
    }
 
}
PS В книге другие числа, для числа 3 там НОК не вычисляется

Решение задачи: «Программа из книги Шилдта, небольшая загвоздка)»

textual
Листинг программы
 public double LeastComFactor(int a, int b)
        {
             int max = a < b ? a : b;
 
            for (double i = 2; i <= max; i++) //Вот тут, 3 пополам будет 1, и оператор for не выполняется
            {
                if (((a % i) == 0) && ((b % i) == 0)) return i;
            }
            return 1;
        }

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


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

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

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