Deceptive numbers: Difference between revisions

Added Algol W
m (→‎{{header|Lua}}: comments)
(Added Algol W)
Line 64:
<pre>
91 259 451 481 703 1729 2821 2981 3367 4141 4187 5461 6533 6541 6601
</pre>
 
=={{header|ALGOL W}}==
Based on the second Wren sample - finds the numbers without needing large integers - see the Talk page.
<syntaxhighlight lang="algolw">
begin % find deceptive numbers - repunits R(n) evenly divisible by composite %
% numbers and n+1; see the task talk page based on the second Wren sample %
 
% returns true if n is an odd prime, false otherwise, uses trial division %
logical procedure isOddPrime ( integer value n ) ;
begin
logical prime;
integer f, f2, toNext;
prime := true;
f := 3;
f2 := 9;
toNext := 16; % note: ( 2n + 1 )^2 - ( 2n - 1 )^2 = 8n %
while f2 <= n and prime do begin
prime := n rem f not = 0;
f := f + 2;
f2 := toNext;
toNext := toNext + 8
end while_f2_le_n_and_prime ;
prime
end isOddPrime ;
 
begin % -- task %
integer n, count;
count := 0;
n := 47;
while begin n := n + 2;
count < 25
end
do begin
if n rem 3 not = 0 and n rem 5 not = 0 and not isOddPrime( n ) then begin
integer mp;
mp := 10;
for p := 2 until n - 1 do mp := ( mp * 10 ) rem n;
if mp = 1 then begin
count := count + 1;
writeon( i_w := 5, s_w := 0, " ", n );
if count rem 10 = 0 then write()
end if_mp_eq_1
end if_have_a_candidate
end while_count_lt_50
end task
 
end.
</syntaxhighlight>
{{out}}
<pre>
91 259 451 481 703 1729 2821 2981 3367 4141
4187 5461 6533 6541 6601 7471 7777 8149 8401 8911
10001 11111 12403 13981 14701
</pre>
 
3,028

edits