Palindromic primes: Difference between revisions

Added PL/I-80 example
(Added Easylang)
(Added PL/I-80 example)
 
Line 916:
<!--</syntaxhighlight>-->
Same output. Didn't actually test if this way was any faster, but expect it would be.
 
=={{header|PL/I-80}}==
<syntaxhighlight lang = "pl/i">
palindromic_primes: procedure options (main);
 
%replace
search_limit by 1000,
true by '1'b,
false by '0'b;
 
dcl
(k, count) fixed bin;
 
put skip edit('Showing palindromic primes up to ',search_limit) (a,f(4));
put skip;
count = 0;
do k = 2 to search_limit;
if isprime(k) & ispalindrome(k) then
do;
put edit(k) (f(6));
count = count + 1;
if mod(count,8) = 0 then put skip;
end;
end;
put skip edit(count, ' were found') (f(4),a);
 
isprime: proc(n) returns (bit(1));
dcl
(n, i, limit) fixed bin;
/* deal with special cases first */
if n < 2 then return (false);
if mod(n, 2) = 0 then return (n = 2);
/* else search up to sqrt of n for divisors */
limit = floor(sqrt(n));
/* aside from 2, only odd numbers can be prime */
i = 3;
do while ((i <= limit) & (mod(n, i) ^= 0));
i = i + 2;
end;
return (i > limit);
end isprime;
 
ispalindrome: proc(n) returns (bit(1));
dcl
(n, nn, q, nd, i, j) fixed bin,
digits(1:10) fixed bin;
/* n is passed by reference, and is modified by */
/* the algorithm, so we work with a local copy */
nn = n;
/* strip off digits and store in array */
nd = 0; /* digits found so far */
do while (nn > 0);
nd = nd + 1;
q = floor(nn / 10);
digits(nd) = nn - q * 10;
nn = q;
end;
/* move from outside in looking for equality */
i = 1;
j = nd;
do while ((i < j) & (digits(i) = digits(j)));
i = i + 1;
j = j - 1;
end;
return (digits(i) = digits(j));
end ispalindrome;
 
end palindromic_primes;
</syntaxhighlight>
{{out}}
<pre>
Showing palindromic primes up to 1000
2 3 5 7 11 101 131 151
181 191 313 353 373 383 727 757
787 797 919 929
20 were found
</pre>
 
 
 
 
=={{header|Python}}==
19

edits