Primality by trial division: Difference between revisions
Content added Content deleted
(→OCaml: exclude negative numbers) |
(adding lambdatalk) |
||
Line 2,362: | Line 2,362: | ||
{{out}} |
{{out}} |
||
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 |
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 |
||
=={{header|Lambdatalk}}== |
|||
<syntaxhighlight lang="scheme"> |
|||
1) the simplest |
|||
{def isprime1 |
|||
{def isprime1.loop |
|||
{lambda {:n :m :i} |
|||
{if {> :i :m} |
|||
then true |
|||
else {if {= {% :n :i} 0} |
|||
then false |
|||
else {isprime1.loop :n :m {+ :i 1}} } |
|||
}}} |
|||
{lambda {:n} |
|||
{isprime1.loop :n {sqrt :n} 2} |
|||
}} |
|||
-> isprime1 |
|||
2) slightly improved |
|||
{def isprime2 |
|||
{def isprime2.loop |
|||
{lambda {:n :m :i} |
|||
{if {> :i :m} |
|||
then true |
|||
else {if {= {% :n :i} 0} |
|||
then false |
|||
else {isprime2.loop :n :m {+ :i 2}} |
|||
}}}} |
|||
{lambda {:n} |
|||
{if {or {= :n 2} {= :n 3} {= :n 5} {= :n 7}} |
|||
then true |
|||
else {if {or {< : n 2} {= {% :n 2} 0}} |
|||
then false |
|||
else {isprime2.loop :n {sqrt :n} 3} |
|||
}}}} |
|||
-> isprime2 |
|||
3) testing |
|||
{isprime1 1299709} -> stackoverflow on my iPad Pro |
|||
{isprime2 1299709} -> true |
|||
{def primesTo |
|||
{lambda {:f :n} |
|||
{S.replace \s by space in |
|||
{S.map {{lambda {:f :i} {if {:f :i} then :i else}} :f} |
|||
{S.serie 2 :n}}} }} |
|||
-> primesTo |
|||
{primesTo isprime1 100} |
|||
-> 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 in 25ms |
|||
{primesTo isprime2 100} |
|||
-> 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 in 20ms |
|||
{primesTo isprime1 1000000} in about 30000ms |
|||
{primesTo isprime2 1000000} in about 15000ms |
|||
</syntaxhighlight> |
|||
=={{header|langur}}== |
=={{header|langur}}== |