Алгоритъм за намиране на най-близкото просто число
Хора, помогнете ми плиз! Необходимо е да се намери най-близкото първоначално число до даден N (WORD), да се преразгледа числата в пряк и обратен ред на N, не е проблем, но колко бързо и правилно да се определи дали е просто? Въпросът е глупав, разбира се, но не съм правил това преди, не искам да измислям нещо измислено - не си струва. Имаме нужда от принцип за определяне на просто число. По-прост принцип, ако е възможно:) Благодаря предварително.
по-лесно? няма проблем:)
Функция IsSimple (n: Integer): Boolean;
Var
i: Цяло число;
Започнете
Резултат: = Невярно;
За i: = 2 до n-1 Направете Ако (n mod i) = 0 След това излезте;
Резултат: = Вярно;
Край;
или още по-добре
За i: = 2 до (n div 2)
> Паладин
сенки! като цяло предполагах, че ще има по-малко разделения. и така се получава цикъл до N div 2. хммм. тоест, ако броят е, да речем 1000, тогава деленията ще бъдат около 500.
> r @ bbit (23.07.06 18:52) [3]
ще има точно един за хиляда. % -)
> за 1000 ще има точно един.
Това е да се установи, че 1000 не е лесно. И за да намерите най-близкия прост, колко итерации?
r @ bbit (23.07.06 17:07) [0]
Мисля, че трябва просто да проверите за простотата на числото +/- 20 например и да намерите най-близкото.
има вероятностни методи с по-малка сложност от разделянето на нещо по-малко:
http://algolist.manual.ru/maths/teornum/
http://algolist.manual.ru/maths/teornum/rabmil.php
и поколение http://algolist.manual.ru/maths/teornum/gene_prime.php
> или още по-добре
> За i: = 2 до (n div 2)
По-добре, IMHO, в края на краищата, поне така:
функция IsPrime (n: Cardinal): Boolean;
вар
i, maxI: кардинал;
започнете
Резултат: = Невярно;
ако не Нечетно (n) и (n> 2) тогава
Изход;
maxI: = Trunc (Sqrt (n));
i: = 3;
докато аз
WORD е 65536 стойности
за всяка стойност - единственото най-близко просто число (ако се оказа, че за някакво число има две най-близки прости числа, изберете едно според някакво правило)
Искам да кажа, че можете да преброите простите числа за всички стойности веднъж и след това да използвате готовия резултат, ако нямате нищо против паметта и я имате
все още има идея - пребройте всички стойности на прости числа и ги разгледайте отблизо
много вероятно е да видите някои модели за намиране на най-близките прости числа за първите 65536 числа, въз основа на това, което сте забелязали, е напълно възможно много забележимо да намалите изброяването, ако го направите, без да съхранявате всичко в памет
+[единадесет]
"брой за всички стойности на прости числа" -> брой за всички стойности на най-близките прости числа
"и погледнете отблизо"
тук се развълнувах малко, защото 65536 числа за един човек са огромна съвкупност