Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Си   Найти похожие ветки 

 
ferdinando   (2007-09-25 13:49) [0]

Как проверить являеться ли число простым на Си?


 
Jeer ©   (2007-09-25 13:54) [1]

Также, как и на сотне других императивных языков.
Познакомься поближе с Эратосфеном, он прямо над тобой завис.


 
Вася Правильный   (2007-09-25 14:01) [2]

что такое "простое на Си число"?


 
Плохиш ©   (2007-09-25 14:03) [3]


> что такое "простое на Си число"?

это, наверное, такое, которое он смог выговорить и понять :-)


 
Dib@zol ©   (2007-09-25 14:07) [4]

А мож тут имеется в виду система единиц СИ, а не язык???


 
Jeer ©   (2007-09-25 14:14) [5]


> Вася Правильный   (25.09.07 14:01) [2]
>
> что такое "простое на Си число"?


Незабвенный Козьма Прутков говорил, в таких случаях: "Будь прост, но не слишком, простейшее -амеба"
Так пожелаем же всем числам на Си оставаться слегка сложными, э.


 
БарЛог ©   (2007-09-25 14:22) [6]

Так выпьем же за кибернетику :)


 
Игорь Шевченко ©   (2007-09-25 14:38) [7]

На С все числа простые, сложных там нету.


 
Washington ©   (2007-09-25 14:47) [8]

Если ты имеешь ввиду числа, которые делятся только на 1 и на самих себя, то в цикле от 2 до нужного числа-1 дели нужное число на переменную и проверяй результат. Если результат - целое число, то выходи из цикла, твоё нужное число - не простое :), а иначе в общем сам подумай чуток :)


 
Галинка ©   (2007-09-25 14:51) [9]

Надо проверять остаток от йелочисленного деления, типа:

enum bool{
false = 0,
true
};

int IsSimole(int val){
 if(val % 2 == 0) return false;
  return true;
}

усе. Телемаркет.


 
Галинка ©   (2007-09-25 14:51) [10]

enum bool{
false = 0,
true
};

int IsSimрle(int val){
if(!(val % 2)) return false;
 return true;
}


 
Ega23 ©   (2007-09-25 14:52) [11]


> Если ты имеешь ввиду числа, которые делятся только на 1
> и на самих себя, то в цикле от 2 до нужного числа-1


Вообще-то до Trunc(sqrt(N))+1


 
Инс ©   (2007-09-25 14:54) [12]

В простейшем случае можно воспользоваться перебором, как советуют в [8], только достаточно перебрать числа от двух до корень из твоего, а не твое минус один. В более сложном - см. тест Рабина-Миллера
http://ru.wikipedia.org/wiki/Тест_Миллера_—_Рабина


 
Washington ©   (2007-09-25 14:56) [13]


> Инс ©   (25.09.07 14:54) [12]

Согласен, просто писал так, не раздумывая :)


 
Галинка ©   (2007-09-25 14:56) [14]

а не эффективнее проверить просто признаки делимости? Или это сложнее?


 
Jeer ©   (2007-09-25 14:56) [15]


> Игорь Шевченко ©   (25.09.07 14:38) [7]


Числа на Си, также как и на.. наследуют свою карму от Бытия.
Есть хорошие числа (7..), если плохие (13,666..), а есть очень не простые - числа Фибоначчи, Люка, Мерсенна, Ферма.. среди которых загадочным образом появляются и простые.
В общем - есть они:))


 
Инс ©   (2007-09-25 14:57) [16]


> а не эффективнее проверить просто признаки делимости?

Ну-ка скажите мне признак делимости на 71? :)


 
Washington ©   (2007-09-25 14:59) [17]

Ладно ещё 71, а может скажешь признак делимости на 1873948525? :)))))
Может автору огромные числа проверять надо


 
Инс ©   (2007-09-25 15:02) [18]


> Ладно ещё 71, а может скажешь признак делимости на 1873948525?
>  :)))))

А это не нужно. То число, что ты привел, делится на 5. Проверять делимость имеет смысл только если делители тоже простые.


 
Галинка ©   (2007-09-25 15:04) [19]

Эти огромные могут делиться уже на более маленькие, чем даже 71. Вот и в методе приведенном выше, примерно на этом основываются.

А вот тут обобзенный признак делимости
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%B7%D0%BD%D0%B0%D0%BA_%D0%9F%D0%B0%D1%81%D0%BA%D0%B0%D0%BB%D1%8F


 
Инс ©   (2007-09-25 15:06) [20]


> Галинка ©   (25.09.07 15:04) [19]

А разве не проще поделить и увидеть, делится или нет? Зачем какие-то признаки делимости нужны? Машине ведь не сложно, она поделит, и возмущаться по этому поводу не будет.


 
Jeer ©   (2007-09-25 15:08) [21]

А вот так мы ищем "предельно" простые в последовательном массиве 0..N-1:

for i := 2 to High(arSieve) do begin
 if arSieve[i] <> 0 then  inc(num);
    j := i + i;
    while j <= High(arSieve) do begin
       arSieve[j] := 0;
       j := j + i;
    end;
 end;


 
Галинка ©   (2007-09-25 15:09) [22]

Washington ©   (25.09.07 14:59) [17]

да цикл можно хоть до позеленения вести. Особенно если это тема урока, на котором задали эту задачу. )) Но можно и пофантазировать, как можно ее решить.

Ну зачем, например, пробовать делить на все четные, когда вроде если делится на два, то уже скорее всего делится на 4 или 6 или 8.


 
Washington ©   (2007-09-25 15:11) [23]


> Инс ©   (25.09.07 15:02) [18]

Ну ладно, тогда 1242387421347 :)))

ps наугад набирал


 
Инс ©   (2007-09-25 15:11) [24]


> Ну зачем, например, пробовать делить на все четные, когда
> вроде если делится на два, то уже скорее всего делится на
> 4 или 6 или 8.

Наоборот. Если делится на 4, то зачем делить два.


 
Инс ©   (2007-09-25 15:13) [25]


> Ну ладно, тогда 1242387421347 :)))

А оно на три делится :)


 
Инс ©   (2007-09-25 15:14) [26]


> Ну зачем, например, пробовать делить на все четные, когда
> вроде если делится на два, то уже скорее всего делится на
> 4 или 6 или 8.

Даже правильнее так: если делится на два, то дальше вообще делить не надо :) Число не простое.


 
Галинка ©   (2007-09-25 15:15) [27]

Да просто скорее всего, если число составное, то цикл кончится уже в числах до 20.

Washington ©   (25.09.07 15:11) [23]

оно не простое. Оно на три делится точно. По признаку делимости )) Сумма его цифр = 48.


 
Washington ©   (2007-09-25 15:16) [28]

Фтопку. Говорю же наугад писАл. :) НО я уверен что можно найти большо-о-о-ое простое число. И поди-ка ты проверь все признаки делимости для него.


 
Инс ©   (2007-09-25 15:17) [29]


> Да просто скорее всего, если число составное, то цикл кончится
> уже в числах до 20.

Бывают и более сложные задачи. Например в криптоалгоритме RSA для генерации ключевой пары необходимо выбрать простые числа порядка 512 бит длины. Вот тут проверить так не получится. Только тест Миллера-Рабина.


 
Jeer ©   (2007-09-25 15:18) [30]


> Галинка ©   (25.09.07 15:15) [27]


А я не помню, делится ли 48 на три или нет.

А вот Сумма/Сумма/Сумма.. его цифр - 3, значит делится:)


 
Palladin ©   (2007-09-25 15:20) [31]


> А я не помню, делится ли 48 на три или нет.

жестоко...


 
Галинка ©   (2007-09-25 15:21) [32]

Jeer ©   (25.09.07 15:18) [30]

ну можно и так. Но я числа до ста вполне держу в голове. Точнее они сами там как-то держатся. Таблицей умножения наверное.


 
Denis_ ©   (2007-09-25 15:22) [33]

для маленьких чисел - решето Эратосфена.


 
Jeer ©   (2007-09-25 15:24) [34]


> Галинка ©   (25.09.07 15:21) [32]


Если в голове много свободного места - рекомендую:

http://primes.utm.edu/primes/lists/all.txt


 
Плохиш ©   (2007-09-25 15:29) [35]


> Галинка ©   (25.09.07 15:15) [27]
> Да просто скорее всего, если число составное, то цикл кончится
> уже в числах до 20.

А как же 529?


 
reonid ©   (2007-09-25 15:35) [36]

Denis_ ©   (25.09.07 15:22) [33]
Для маленьких чисел, миллионов где-нибудь до 10, можно завести таблицу.
И искать бинарным поиском.


 
Jeer ©   (2007-09-25 15:39) [37]

Как демонстрируют практики, простые числа с миллионами значащих цифр находятся с помощью совсем уж не Cray-system:
M32582657   9,808,358   2006   Pentium 4 (3 GHz)


 
Denis_ ©   (2007-09-25 15:40) [38]


> reonid ©   (25.09.07 15:35) [36]

Я об этом и говорил. Понятно же, что "маленькие числа" это не 13 и 17:)


 
Anatoly Podgoretsky ©   (2007-09-25 15:43) [39]

> Jeer  (25.09.2007 15:18:30)  [30]

Продолжать дальше складывать, пока не останется число из одно цифры 3/6/9


 
Jeer ©   (2007-09-25 16:14) [40]


> Anatoly Podgoretsky ©   (25.09.07 15:43) [39]


Во ! Я ж говорю, нас одни мэтры учили, а чему не доучились - сами придумаем и скажем, что так оно и было.

> Сумма/Сумма/Сумма.


Алгоритм, однако:))


 
reonid ©   (2007-09-25 16:18) [41]

Denis_ ©   (25.09.07 15:40) [38]
Я имел в виду один раз посчитать, сложить в файл
и больше к решету не обращаться.


 
Anatoly Podgoretsky ©   (2007-09-25 16:27) [42]

Чего думать, трясти надо - решето



Страницы: 1 2 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.016 c
2-1191390380
kyn66
2007-10-03 09:46
2007.10.28
TreeView программное управление


2-1191515645
Windows
2007-10-04 20:34
2007.10.28
Borland Delphi 6 + asm


1-1186755475
Ricks
2007-08-10 18:17
2007.10.28
Странная рекурсия...


10-1139165789
Nadi
2006-02-05 21:56
2007.10.28
Вставка картинок в Word


6-1171023506
Alek_1
2007-02-09 15:18
2007.10.28
Как определить хендл открытого удаленного подключения к ине...