Идеальный номер в С - PullRequest
       50

Идеальный номер в С

4 голосов
/ 29 декабря 2010

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

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, которую я не понимаю.

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

Ответы [ 4 ]

3 голосов
/ 29 декабря 2010

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

3 голосов
/ 29 декабря 2010

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

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.

1 голос
/ 29 декабря 2010

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

В C 0 равно false, а все остальные числа - true, поэтому !(num % i) проверяет, равно ли "num modulo i" нулю, или, говоря простым математикой, num делится на i равномерно.

0 голосов
/ 08 декабря 2011

Очень простым способом, код if(!(num%i)) проверяет, что если значение num делится на i, и возвращает, если остаток равен 0 или нет ... Следовательно, оператор модуля% используется здесь, чтобы найти остаток.этот фрагмент кода похож на if(num % i==0).если он возвращает true, то значение i должно быть добавлено с суммой.Наконец, если значение sum равно значению num, число является идеальным, и число отображается!

...