НОК через простые множители - C#

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

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

Добрый день! Такая проблем, что нужно найти нок через разложение на простые множители вот так я раскладываю на простые множители, но как вычеркнуть не нужные не понимаю... можно попробовать не выводить на экран, а добавлять в массив, но опять таки не знаю, как реализовать чтобы 2 массива объединились.. ПРимер разложим 441=3·3·7·7 и 700=2·2·5·5·7. Теперь составим произведение из всех множителей, участвующих в разложениях данных чисел: 2·2·3·3·5·5·7·7·7. Исключим из этого произведения все множители, одновременно присутствующие в обоих разложениях (такой множитель только один – это число 7): 2·2·3·3·5·5·7·7. Таким образом, НОК(441, 700)=2·2·3·3·5·5·7·7=44 100.
 Console.WriteLine("Введите первое число");
            int i = 2;
            int t = Int32.Parse(Console.ReadLine());
            while (i <= t)
                {
                    if (t % i == 0)
                    {
                    Console.WriteLine(i);
                    t = t / i;
                        if (t > 1)
                        Console.WriteLine("*");
                }
                    else
                        i = i + 1;
 
                 }
            int k = Int32.Parse(Console.ReadLine());
            i = 2;
            while (i <= k)
            {
                if (k % i == 0)
                {
                    Console.WriteLine(i);
                    k = k / i;
                    if (k > 1)
                        Console.WriteLine("*");
                }
                else
                    i = i + 1;
 
            }

Решение задачи: «НОК через простые множители»

textual
Листинг программы
    class Program
    {
        public static void  Main()
        {
            int A = 441;
            int B = 700;
            int tmpA = A;
            int tmpB = B;
            int NOK = 1;// палюбэ
            int iA = 2;// нас интересуют числа больше 1-го
 
            while (iA <= tmpA)
            {
               //-------------ищем множетель числа A.
                if (tmpA % iA != 0)
                {
                    iA++;
                    continue;
                }
 
                // проверяем не является ли он так же делителем и для числа B если нет нок увеличиваем число A уменьшаем 
                if (tmpB % iA != 0)// если l А
                {
                    while (tmpA % iA == 0)
                    {
                        NOK *= iA;
                        tmpA /= iA;
                    }
                    continue;
                }
                //в противном случае, находим максимально число вхождений найденого делителя в обоих числах, и так как нас интересуют только простые числа, делим каждае число на общий делитеь до тех пор пока оно делится
                int count = 0;
                while (tmpA % iA == 0 || tmpB % iA == 0)
                {
                    count++;
                    if (tmpA % iA == 0)
                    {
                        tmpA /= iA;
                    }
                    if (tmpB % iA == 0)
                    {
                        tmpB /= iA;
                    }
                }
                NOK *= (int)Math.Pow(iA, count);// умножаем нода, на наш делитель count раз (тобишь возводим в степень)
                iA++;
            }
                
           // ------------------С числом А разобрались.
           
            //-------------- Разбираемся с тем что осталось от числа B
            int iB = 2;// можно конечно и не заводить еще переменные, но так понятние, что откуда... 
           
            // все общие простые делители мы уже обработали, так что здесь это делать не имеет смысла
            while (iB <= tmpB)
            {
                if (tmpB % iB != 0)
                {
                    iB++;
                    continue;
 
                }
                while (tmpB % iB == 0)
                {
                    NOK *= iB;
                    tmpB /= iB;
                }
                iB++;
            }
            //---------------- C B Разобрались...
 
            //Выводим результат
            Console.WriteLine("НОК для чисел {0} и {1} равен {2}", A, B, NOK);
            Console.ReadLine();
        }
    }

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


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

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

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