Титла: Алгоритъм за намиране на прости числа Публикувано от: ivanatora в Apr 06, 2005, 17:48 Прости числа. 1 2 3 5 7 11 13 17.... Число, което се дели само на себе си и 1 без остатък е просто
![]() ![]() Имах една идея, ама по-добре без нея ![]() Титла: Алгоритъм за намиране на прости числа Публикувано от: peio в Apr 06, 2005, 17:53
Титла: Алгоритъм за намиране на прости числа Публикувано от: VladSun в Apr 06, 2005, 17:55 ![]() ![]() 1. от множеството на естетствените числа изключваш всички числа след 2 и делими на 2 - т.е. 4, 6 и т.н. 2. изключваш всички числа след 3 и делими на 3 и т.н. Доколкото си спомням имаше някаква формула в учебника по математика за 4-7клас?!?! (от моето време обаче) дето обясняват простите числа. За тази формула е доказано, обаче, че още на 6-милиардното число "гърми" - т.е. получава се число, което не е просто. Ако намериш бърз алгоритъм доста ще спечелиш ![]() Титла: Алгоритъм за намиране на прости числа Публикувано от: romeo_ninov в Apr 06, 2005, 19:58
Между другото по дефиниция 1 НЕ Е просто число :-) По-добре е да проверяваш дали се дели на простите числа, които си "колекционирал" до този момент Титла: Алгоритъм за намиране на прости числа Публикувано от: hotrod в Apr 06, 2005, 23:58 Избери си
![]() http://mathworld.wolfram.com/PrimeFormulas.html А тук има PDF с алгоритъм, но е на псевдо език. http://www.cse.iitk.ac.in/news/primality.html Титла: Алгоритъм за намиране на прости числа Публикувано от: в Apr 07, 2005, 08:04 Има един метод за намиране на прости числа, датиращ от III век пр.н.е и се нарича "сито на Ератостен" (Eratosten sieve). Това е класическа задача от "масиви". Само ти трябва много памет. Ето алгоритъм и изработка на C++:
http://www.cpp-home.com/tutorial.php?204_1 Ако те интересува повече, потърси в книжарниците "Алгоритми на C" от Робърт Седжуик (Algrithms in C, R. Sedgwick). Титла: Алгоритъм за намиране на прости числа Публикувано от: ivak в Apr 07, 2005, 12:37 можеш да намериш подобен алгоритъм вече реализиран (при това доста ефективен) във всеки уважаващ себе си криптографски пакет: openssl, gnu pg, gnu crypt lib и компания. простите числа лежат в основата на повечето асиметрични криптографски системи (като rsa например).
Титла: Алгоритъм за намиране на прости числа Публикувано от: saturn_vk в Apr 07, 2005, 16:05 prime95 не правеше ли точно това?
Титла: Алгоритъм за намиране на прости числа Публикувано от: hippo в Apr 07, 2005, 16:58 /* Rezultata e 1 ako e prosto, inache 0 */
char isPrime(unsigned n) { usnigned i = 2; if (2 == n) return 1; while (i <= sqrt(n)) { if (n % i == 0) return 0; i++ } } Programa za namirane na prostite chisla do n po Eratosten #include <stdio.h> #define MAX 1000 unsigned n = 100; // purvite n prosti chisla char sieve[MAX]; void go(unsigned n) { unsigned i = 2, j; while (i <= 2) { if (sieve == 0){ printf("%u ", i); j = i; while (j <= n) { sieve[j] = 1; j += 1; } } i++; } } Титла: Алгоритъм за намиране на прости числа Публикувано от: в Apr 07, 2005, 18:07 hippo, при мен твоята програмка за "Решето на Ератостен" не върви и не ми се търсеше грешката, затова пренаписах програмката и смятам, че така е доста по ясно (лично мнение).
Поздрави cipher ![]() Титла: Алгоритъм за намиране на прости числа Публикувано от: hippo в Apr 08, 2005, 16:02 Cipher, вярно е, че не работи. Написах го на прима виста. Грешка има на 8-мия ред от функцията go():
Вместо j += 1; трябва да е j += i; (ако искаш ще на правя patch ![]() Динамично заделената памет за sieve е по-добро решение, но не забравяй като си заделил памет да я освобождаваш с free() ![]() Cipher, благодаря за градивната критика ![]() Титла: Алгоритъм за намиране на прости числа Публикувано от: в Apr 10, 2005, 16:25 hippo, благодаря ти, аз ще се поправя.
![]() cipher ![]() Титла: Алгоритъм за намиране на прости числа Публикувано от: ivanatora в Apr 11, 2005, 13:40 Благодаря ви на всички за коментара
![]() ![]() |