Primality by Wilson's theorem: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add CLU) |
(Added Polyglot:PL/I and PL/M) |
||
Line 1,328: | Line 1,328: | ||
=={{header|PL/M}}== |
=={{header|PL/M}}== |
||
{{works with|8080 PL/M Compiler}} under CP/M (or an emulator) |
|||
<lang pli>100H: /* FIND PRIMES USING WILSON'S THEOREM: */ |
<lang pli>100H: /* FIND PRIMES USING WILSON'S THEOREM: */ |
||
/* P IS PRIME IF ( ( P - 1 )! + 1 ) MOD P = 0 */ |
/* P IS PRIME IF ( ( P - 1 )! + 1 ) MOD P = 0 */ |
||
Line 1,378: | Line 1,378: | ||
EOF</lang> |
EOF</lang> |
||
{{out}} |
|||
<pre> |
|||
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 |
|||
</pre> |
|||
See also [[#Polyglot:PL/I and PL/M]] |
|||
=={{header|Polyglot:PL/I and PL/M}}== |
|||
The following Primality by Wilson's theorem solution will run under both PL/M and PL/I. |
|||
{{works with|8080 PL/M Compiler}} under CP/M (or an emulator) |
|||
Should work with many PL/I implementations. |
|||
<lang pli>/* PRIMALITY BY WILSON'S THEOREM */ |
|||
wilson_100H: procedure options (main); |
|||
declare eof binary; |
|||
/* CP/M BDOS SYSTEM CALL AND CONSOLE OUTPUT ROUTINES, ETC. */ /* |
|||
DECLARE BINARY LITERALLY 'ADDRESS', CHARACTER LITERALLY 'BYTE'; |
|||
DECLARE PUT LITERALLY '/*', RETURNS LITERALLY ' '; |
|||
BDOS: PROCEDURE( FN, ARG ); DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END /* */; |
|||
PRCHAR: PROCEDURE( C ); DECLARE C CHARACTER; PUT edit(c)(a(1)) /* */ /* |
|||
CALL BDOS( 2, C ) /* */; |
|||
END PRCHAR; |
|||
PRNUMBER: PROCEDURE( N ); DECLARE N BINARY; /* */ |
|||
if n < 10 then put edit(n)(f(1)); /* */ |
|||
else if n < 100 then put edit(n)(f(2)); /* */ |
|||
else if n < 1000 then put edit(n)(f(3)); /* */ |
|||
else put edit(n)(f(6)); /* |
|||
*//* |
|||
DECLARE V ADDRESS, N$STR( 6 ) BYTE, W BYTE; |
|||
N$STR( W := LAST( N$STR ) ) = '$'; |
|||
N$STR( W := W - 1 ) = '0' + ( ( V := N ) MOD 10 ); |
|||
DO WHILE( ( V := V / 10 ) > 0 ); |
|||
N$STR( W := W - 1 ) = '0' + ( V MOD 10 ); |
|||
END; |
|||
CALL BDOS( 9, .N$STR( W ) ) /* */; |
|||
END PRNUMBER; |
|||
MODF: PROCEDURE( A, B )RETURNS (binary)/* |
|||
BINARY /* */; DECLARE ( A, B ) BINARY; RETURN (mod(a,b))/* |
|||
( A MOD B ) /* */; |
|||
END MODF; |
|||
/* TASK */ |
|||
DECLARE N BINARY; |
|||
ISWILSONPRIME: PROCEDURE( N )RETURNS (bit(1))/* |
|||
BYTE /* */; |
|||
DECLARE N BINARY; |
|||
DECLARE ( FMODP, I ) BINARY; |
|||
FMODP = 1; |
|||
DO I = 2 TO N - 1; |
|||
FMODP = MODF( FMODP * I, N ); |
|||
END; |
|||
RETURN ( FMODP = N - 1 ); |
|||
END ISWILSONPRIME ; |
|||
DO N = 1 TO 100; |
|||
IF ISWILSONPRIME( N ) THEN DO; |
|||
CALL PRCHAR( ' ' ); |
|||
CALL PRNUMBER( N ); |
|||
END; |
|||
END; |
|||
EOF = 1; /* the 8080 PL/M compiler ignores everything after EOF */ |
|||
end wilson_100H ;</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |