Вопрос

Мне нужно написать программу C, чтобы найти идеальное число ..

main()
{
    int n=1000,sum = 0;
    for(int num = 1; num <= n; num++)
    {
        sum = 0;
        for(int i = 1; i < num; i++)
        {
            if(!(num%i))
            {
                sum+=i;
            }
        }
        if(sum == num)
            printf("\n%d",num);
    }
}

if(!(num%i)) - Это D -линия, которую я не понимаю.

Если есть какой -либо другой простой метод, пожалуйста, предложите мне

Это было полезно?

Решение

if(!(num%i)) просто означает if( (num%i) == 0 )

Другие советы

Если вы ищете более эффективный способ найти идеальные цифры, вы можете прочитать Страница Википедии на идеальных числах. Анкет В нем вы обнаружите, что нет известных нечетных идеальных чисел (и используя свой метод, который вы не найдете), и что все даже идеальные цифры имеют форму:

2^(p - 1)*(2^p - 1) куда 2^p - 1 является ярким и, следовательно, p это главное. Таким образом, если вы хотите найти даже идеальные числа, проверьте первичность 2^p - 1 для всех простых чисел p, если так 2^(p - 1)*(2^p - 1) идеально.

Если вы просто хотите найти несколько небольших идеальных чисел, используя простой цикл, вы можете сделать свой подход более эффективным, отметив, что если i Разделение num, тоже num / i. Анкет То есть вам нужно только зацикливаться на квадратном корне num и добавить пары i а также num / i к sum. Анкет Обратите внимание, что если num квадратный, квадратный корень num должен быть добавлен только один раз.

Обратите внимание, что если вы рассчитываете sum Таким образом, это будет 2 * num Для идеальных чисел, а не num.

num % i означает "num модуло I "; он возвращает напоминание о разделении чисел (следовательно, число между 0 а также i-1).

В C, 0 ложное, и все остальные числа верны, поэтому !(num % i) Тесты, если «num modulo i» равна нулю или в простой математике, если num равномерно делится на i.

Очень простым способом if(!(num%i)) Код проверяет, что если значение num делится на i и возвращает, если оставшееся 0 или нет ... следовательно, оператор модуля используется здесь, чтобы найти остаток. Этот кусок кода похож на if(num % i==0)Анкет Если он возвращает true, то значение, которое я должен быть добавлен с суммой. Наконец, если значение суммы равно значению NUM, число идеально подходит, а число отображается!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top