Как обнаружить простое число - PullRequest
1 голос
/ 28 мая 2010

Я знаю, что есть много бинарных операций, чтобы показать, что что-то верно например, мы можем показать, является ли число степенью двойки или что-то еще, есть ли какая-то теория или специальный двоичный метод, чтобы показать, является ли число простым?

Ответы [ 5 ]

6 голосов
/ 28 мая 2010

Определить, является ли число простым, не очень просто!

Прочтите эту статью о PRIMES в прорыве P : http://www.ams.org/notices/200305/fea-bornemann.pdf, чтобы дать вам представление о том, насколько серьезной является эта проблема.

Эта новостная статья может быть легче читать: http://members.cox.net/mathmistakes/primes.htm

Короче говоря, если вы найдете простой «двоичный метод», вы станете знаменитым!

5 голосов
/ 28 мая 2010

Как правило, вы просто чек .

1 голос
/ 28 мая 2010

Хороший пример алгоритма Sieve для поиска простых чисел можно найти на нашей странице этой википедии.

Сито Эратосфена

Один из наиболее интересных методов поиска простых чисел, и сито Эйлера (затронутое внизу той же страницы) немного ускоряет его.

0 голосов
/ 20 января 2013
bool isPrime(int number){

    if(number < 2) return false;
    if(number == 2) return true;
    if(number % 2 == 0) return false;
    for(int i=3; (i*i)<=number; i+=2){
        if(number % i == 0 ) return false;
    }
    return true;

}

Примечание. Это будет медленно, если ваш ввод больше 10 ^ 9.

0 голосов
/ 28 мая 2010

Существует действительно большая разница между степенной силой 2 и простыми числами.
Если вы посмотрите на нашу систему представления чисел: 1243 = 1 * 10 3 + 2 * 10 2 + 4 * 10 1 + 3 * 10 0
Довольно легко определить, когда число можно разделить на 10 (младшая цифра равна нулю) или является степенью 10 (все младшие цифры равны нулю и имеют значение «1», или сумма всех цифр равна 1).
То же самое для двоичного кода: 1243 = 1 * 2 10 + 0 * 2 9 + 0 * 2 8 + 1 * 2 7 + 1 * 2 6 + 0 * 2 5 + 1 * 2 4 + 1 * 2 3 + 0 * 2 2 + 1 * 2 1 + 1 * 2 0
Вы можете проверить цифры, чтобы проверить, можно ли разделить число на 2 или даже на степень 2 таким же образом, как для представления числа на основе 10.

Теперь рассмотрим другие системы представления чисел. Я предполагаю, что римские цифры должны иметь некоторые интересные свойства, но вы, вероятно, интересуетесь чем-то вроде: 1243 = 2 0 * 3 0 * 5 0 * 7 0 * 11 1 * 13 0 * 17 0 * 19 0 * 23 0 * 29 0 * 31 0 * 37 0 * 41 0 * 43 0 * 47 0 * 53 0 * 59 0 * 61 0 * 67 0 * 71 0 * 73 0 * 79 0 * 83 0 * 89 0 * 97 0 * 101 0 * 103 0 * 107 0 * 109 0 * 113 1 = 11 1 * 113 1 = [0,0,0,0,1 , 0,0,0,0,0 ...] простой основе
То есть число кодируется как произведение степеней простых чисел. Такая система обладает хорошим свойством выполнять различные проверки, связанные с простыми числами, гораздо проще, чем в битах или в десятичных числах.

P.S. В то время как системы с взвешенной суммой дают вам простой способ подсчета сумм и разностей, системы с мощным продуктом упрощают умножение и деление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...