Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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]


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

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


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



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

Форум: "Прочее";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.046 c
11-1174745393
SergeR
2007-03-24 17:09
2007.10.28
USE_NAMES и KOLActionList ошибка


11-1174917530
ElectriC
2007-03-26 17:58
2007.10.28
RichEdit XP


4-1177939597
Плиз_не_пинайте
2007-04-30 17:26
2007.10.28
Поиск окон с помощью FindWindow по маске


1-1186651582
Alex_C
2007-08-09 13:26
2007.10.28
Отловить ошибку в TThread


2-1191324437
Mariya
2007-10-02 15:27
2007.10.28
Создание кнопки программно





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский