Операции с числами: объясните принцип работы кода (2) - C#

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

Всем доброй ночи, я опять продолжаю нубить при изучении C# и пишу с просьбой помочь разобраться с кодом. Это пример программы в учебнике, по условию тут она находит наибольший и наименьший множители числа 100.
using System;
class Comma
{
    public static void Main()
    {
        int i, j;
        int smallest, largest;
        int num;
        num = 100;
        smallest = largest = 1;
        for (i = 2, j = num / 2; (i <= num / 2) & (j >= 2); i++, j--)
        {
            if ((smallest == 1) & (num % i) == 0)
                smallest = i;
            if ((largest == 1) & (num % j) == 0)
                largest = j;
        }
            Console.WriteLine("Наибольший множитель: " + largest);
            Console.WriteLine("Наименьший множитель: " + smallest);
        
    }
}
Ответ, который она выводит: Наибольший множитель: 50 Наименьший множитель: 2 Здесь вроде бы все предельно понятно, но есть два нюанса, зачем нужны переменные smallest и largest, и зачем им присваивается именно 1, если поменять на 0 - ничего не изменится, а если их убрать из инструкции цикла, т.е. убрать (smallest == 1) и (largest == 1) будет такой ответ: Наибольший множитель: 2 Наименьший множитель: 50 То есть тут нужно будет просто переменным названия поменять, местами переставить. Я так понял, что данное присваивание (smallest == 1) способствует тому, что берется первое значение в ответ, а если убрать это присваивание, то программа проходит весь цикл до конца и берет последнее значение, разрешенное условием. И вопрос по самому циклу, почему в итоге получается только два ответа? Ведь по условию (num % i) == 0) должны выводиться все числа num, которые делятся на i без остатка. Или я совсем забыл, но предполагаю, что дело в операторе "&" в этом месте "(i <= num / 2) & (j >= 2)". Именно благодаря оператору & выбирается только один ответ? Я прав или нет? Если нет, объясните как это работает, пожалуйста. Заранее премного благодарен )

Код к задаче: «Операции с числами: объясните принцип работы кода (2) - C#»

textual
for (i = 2, j = num / 2; (i <= num / 2) & (j >= 2); i++, j--) //пусть  i=5,а j = 47 ;операция даст результат true=> идём вниз.
        {
            if ((smallest == 1) & (num % i) == 0) //100 % 5 = 0 -true
                smallest = i;
            if ((largest == 1) & (num % j) == 0) //100 от 47 [S]=[/S] 0 -false
                largest = j;//в результате false=>начать заного
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

7   голосов, оценка 4.000 из 5


СДЕЛАЙТЕ РЕПОСТ