Q
소수성 검사하기
2
A
답변
5
:
: *mod (a b n -- n2)
*/mod drop ;
: expmod { x e n -- n2 } \ compute x^e mod n by repeated squaring
e 0= if 1 exit
else
x e 2/ n recurse dup n *mod
e 1 and if x n *mod then
then ;
: prime (n -- f)
3 swap dup expmod 3 = ;
이 테스트에서 번호가 복합이라고 말하면 분명히 복합입니다. 숫자가 소수라고하면 소수 일 것입니다. 그러나 합성 숫자가 빠져 나올 것입니다 (이러한 숫자를 "가짜 의사 (pseudoprimes)"라고합니다). 이 테스트는 일부 목적을 위해서는 상당히 빠르고 충분합니다.
게시 한 코드는 n의 제곱근까지 제수 2, 3, 4, 5 ...를 테스트했으며 2,3,5,7을 테스트하면 약 2 배 빠릅니다. [Rosetta Code] (http://rosettacode.org/wiki/Primality_by_trial_division#Forth)에 대해 들어 보셨습니까?
+0
복합 재료가 빠져 나올 때 전체적으로 1 차 검사가 필요하지만 그 시점까지 많은 숫자가 없어지므로 실제로 연습하는 것이 좋습니다. – RonaldBarzell
당신도 [2]보다 큰 약수를 테스트 할 필요가 없으므로? –
더 빠른 알고리즘 또는 구현 예를 제안 하시겠습니까? – sheepez