Программа из книги Шилдта, небольшая загвоздка) - C#
Формулировка задачи:
Привет!) В книге Шилдта при объяснении методов с параметрами есть пример, в котором находится наименьший множитель двух чисел. Все просто, и код я понимаю, но программа не работает при условии, что одно из чисел равно 3. Вопрос: это я тупой или программ не предусмотрела это?) На всякий вложу сюда всю программу:
PS В книге другие числа, для числа 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();
}
}
}Решение задачи: «Программа из книги Шилдта, небольшая загвоздка)»
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;
}