Deceptive numbers: Difference between revisions
Content added Content deleted
m (→{{header|Lua}}: comments) |
(Added Algol W) |
||
Line 64: | Line 64: | ||
<pre> |
<pre> |
||
91 259 451 481 703 1729 2821 2981 3367 4141 4187 5461 6533 6541 6601 |
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> |
</pre> |
||