42 lines
779 B
ObjectPascal
42 lines
779 B
ObjectPascal
program SemiPrime;
|
|
{$IFDEF FPC}
|
|
{$Mode objfpc}// compiler switch to use result
|
|
{$ELSE}
|
|
{$APPTYPE CONSOLE} // for Delphi
|
|
{$ENDIF}
|
|
uses
|
|
primTrial;
|
|
|
|
function isSemiprime(n: longWord;doWrite:boolean): boolean;
|
|
var
|
|
fac1 : LongWord;
|
|
begin
|
|
//a simple isAlmostPrime(n,2) would do without output;
|
|
fac1 := SmallFactor(n);
|
|
IF fac1 < n then
|
|
Begin
|
|
n := n div fac1;
|
|
result := SmallFactor(n) = n;
|
|
if result AND doWrite then
|
|
write(fac1:10,'*',n:11)
|
|
end
|
|
else
|
|
result := false;
|
|
end;
|
|
var
|
|
i,k : longWord;
|
|
BEGIN
|
|
For i := 2 to 97 do
|
|
IF isSemiPrime(i,false) then
|
|
write(i:3);
|
|
writeln;
|
|
//test for big numbers
|
|
k := 4000*1000*1000;
|
|
i := k-100;
|
|
repeat
|
|
IF isSemiPrime(i,true) then
|
|
writeln(' = ',i:10);
|
|
inc(i);
|
|
until i> k;
|
|
END.
|