Wilson primes of order n: Difference between revisions

Content added Content deleted
(add gwbasic)
(Wilson primes of order n in various BASIC dialents)
Line 88: Line 88:
11: 17 2713
11: 17 2713
</pre>
</pre>


=={{header|BASIC}}==
==={{header|BASIC256}}===
{{trans|FreeBASIC}}
<lang BASIC256>function isPrime(v)
if v <= 1 then return False
for i = 2 To int(sqr(v))
if v % i = 0 then return False
next i
return True
end function

function isWilson(n, p)
if p < n then return false
prod = 1
p2 = p*p #p^2
for i = 1 to n-1
prod = (prod*i) mod p2
next i
for i = 1 to p-n
prod = (prod*i) mod p2
next i
prod = (p2 + prod - (-1)**n) mod p2
if prod = 0 then return true else return false
end function

print " n: Wilson primes"
print "----------------------"
for n = 1 to 11
print n;" : ";
for p = 3 to 10499 step 2
if isPrime(p) and isWilson(n, p) then print p; " ";
next p
print
next n
end</lang>

==={{header|QBasic}}===
{{works with|QBasic}}
{{works with|QuickBasic}}
{{trans|FreeBASIC}}
<lang QBasic>FUNCTION isPrime (ValorEval)
IF ValorEval < 2 THEN isPrime = False
IF ValorEval MOD 2 = 0 THEN isPrime = 2
IF ValorEval MOD 3 = 0 THEN isPrime = 3
d = 5
WHILE d * d <= ValorEval
IF ValorEval MOD d = 0 THEN isPrime = False ELSE d = d + 2
WEND
isPrime = True
END FUNCTION

FUNCTION isWilson (n, p)
IF p < n THEN isWilson = False
prod = 1
p2 = p ^ 2
FOR i = 1 TO n - 1
prod = (prod * i) MOD p2
NEXT i
FOR i = 1 TO p - n
prod = (prod * i) MOD p2
NEXT i
prod = (p2 + prod - (-1) ^ n) MOD p2
IF prod = 0 THEN isWilson = True ELSE isWilson = False
END FUNCTION

PRINT " n: Wilson primes"
PRINT "----------------------"
FOR n = 1 TO 11
PRINT USING "##: "; n;
FOR p = 3 TO 10099 STEP 2
If isPrime(p) AND isWilson(n, p) Then Print p; " ";
NEXT p
PRINT
NEXT n
END</lang>

==={{header|Yabasic}}===
{{trans|FreeBASIC}}
<lang yabasic>print "n: Wilson primes"
print "---------------------"
for n = 1 to 11
print n, ":",
for p = 3 to 10099 step 2
if isPrime(p) and isWilson(n, p) then print p, " ", : fi
next p
print
next n
end

sub isPrime(v)
if v < 2 then return False : fi
if mod(v, 2) = 0 then return v = 2 : fi
if mod(v, 3) = 0 then return v = 3 : fi
d = 5
while d * d <= v
if mod(v, d) = 0 then return False else d = d + 2 : fi
end while
return True
end sub

sub isWilson(n, p)
if p < n then return False : fi
prod = 1
p2 = p**2
for i = 1 to n-1
prod = mod((prod*i), p2)
next i
for i = 1 to p-n
prod = mod((prod*i), p2)
next i
prod = mod((p2 + prod - (-1)**n), p2)
if prod = 0 then return True else return False : fi
end sub</lang>



=={{header|C++}}==
=={{header|C++}}==