Semiprime: Difference between revisions

m
Line 565:
}</lang>
=={{header|Pascal}}==
uses unit primTrial http://rosettacode.org/wiki/Primality_by_trial_division#improved_using_number_wheel
Simple test with trial division to get small factors.
Tested with freepascal.
 
<lang pascal>program SemiPrime;
{$Mode objfpc}// compiler switch to use result
uses
 
primTrial;
function SmallFactor (p: LongWord):longWord;
//result = p if prime
const
//number wheel without multiples of 2,3,5
d235 :array[0..7] of LongWord = (6,4,2,4,2,4,6,2);
var
k : LongWord;
Begin
IF p <2 then
Begin
result := 1;
EXIT;
end;
result := 2; IF p MOD result= 0 then EXIT;
result := 3; IF p MOD result= 0 then EXIT;
result := 5; IF p MOD result= 0 then EXIT;
 
result := 1;
k := 0;
repeat
result := result+d235[k];
k := (k+1) AND 7;
IF p MOD result = 0 then
EXIT;
until sqr(result) >= p;
result := p;
end;
 
function isSemiprime(n: longWord;doWrite:boolean): boolean;
Line 614 ⟶ 587:
result := false;
end;
 
var
i,k : longWord;
Anonymous user