Brazilian numbers: Difference between revisions
Content added Content deleted
(Dialects of BASIC moved to the BASIC section.) |
(→{{header|Moula-2}}: Added a solution.) |
||
Line 3,088: | Line 3,088: | ||
{7, 13, 15, 21, 27, 31, 33, 35, 39, 43, 45, 51, 55, 57, 63, 65, 69, 73, 75, 77} |
{7, 13, 15, 21, 27, 31, 33, 35, 39, 43, 45, 51, 55, 57, 63, 65, 69, 73, 75, 77} |
||
{7, 13, 31, 43, 73, 127, 157, 211, 241, 307, 421, 463, 601, 757, 1093, 1123, 1483, 1723, 2551, 2801}</pre> |
{7, 13, 31, 43, 73, 127, 157, 211, 241, 307, 421, 463, 601, 757, 1093, 1123, 1483, 1723, 2551, 2801}</pre> |
||
=={{header|Modula-2}}== |
|||
{{trans|C|<code>CARDINAL</code> (unsigned integer) used instead of signed integer.<code>ELSIF</code> used instead of sequential <code>IF</code>s with <code>RETURN</code> s.}} |
|||
{{works with|ADW Modula-2|any (Compile with the linker option ''Console Application'').}} |
|||
<syntaxhighlight lang="modula2"> |
|||
MODULE BrazilianNumbers; |
|||
FROM STextIO IMPORT |
|||
WriteLn, WriteString; |
|||
FROM SWholeIO IMPORT |
|||
WriteInt; |
|||
TYPE |
|||
TString7 = ARRAY [0 .. 6] OF CHAR; |
|||
TKinds = ARRAY [0 .. 2] OF TString7; |
|||
CONST |
|||
Kinds = TKinds {" ", " odd ", " prime "}; |
|||
VAR |
|||
I, C, N: CARDINAL; |
|||
PROCEDURE SameDigits(N, B: CARDINAL): BOOLEAN; |
|||
VAR |
|||
F: CARDINAL; |
|||
BEGIN |
|||
F := N MOD B; |
|||
N := N / B; |
|||
WHILE N > 0 DO |
|||
IF N MOD B <> F THEN |
|||
RETURN FALSE; |
|||
END; |
|||
N := N / B; |
|||
END; |
|||
RETURN TRUE; |
|||
END SameDigits; |
|||
PROCEDURE IsBrazilian(N: CARDINAL): BOOLEAN; |
|||
VAR |
|||
B: CARDINAL; |
|||
BEGIN |
|||
IF N < 7 THEN |
|||
RETURN FALSE |
|||
ELSIF (N MOD 2 = 0) AND (N >= 8) THEN |
|||
RETURN TRUE |
|||
ELSE |
|||
FOR B := 2 TO N - 2 DO |
|||
IF SameDigits(N, B) THEN |
|||
RETURN TRUE |
|||
END |
|||
END; |
|||
RETURN FALSE; |
|||
END |
|||
END IsBrazilian; |
|||
PROCEDURE IsPrime(N: CARDINAL): BOOLEAN; |
|||
VAR |
|||
D: CARDINAL; |
|||
BEGIN |
|||
IF N < 2 THEN |
|||
RETURN FALSE; |
|||
ELSIF N MOD 2 = 0 THEN |
|||
RETURN N = 2; |
|||
ELSIF N MOD 3 = 0 THEN |
|||
RETURN N = 3; |
|||
ELSE |
|||
D := 5; |
|||
WHILE D * D <= N DO |
|||
IF N MOD D = 0 THEN |
|||
RETURN FALSE |
|||
ELSE |
|||
D := D + 2; |
|||
IF N MOD D = 0 THEN |
|||
RETURN FALSE |
|||
ELSE |
|||
D := D + 4 |
|||
END |
|||
END |
|||
END; |
|||
RETURN TRUE; |
|||
END |
|||
END IsPrime; |
|||
BEGIN |
|||
FOR I := 0 TO 2 DO |
|||
WriteString("First 20"); |
|||
WriteString(Kinds[I]); |
|||
WriteString("Brazilian numbers:"); |
|||
WriteLn; |
|||
C := 0; |
|||
N := 7; |
|||
LOOP |
|||
IF IsBrazilian(N) THEN |
|||
WriteInt(N, 1); |
|||
WriteString(" "); |
|||
C := C + 1; |
|||
IF C = 20 THEN |
|||
WriteLn; |
|||
WriteLn; |
|||
EXIT |
|||
END; |
|||
END; |
|||
CASE I OF |
|||
0: N := N + 1; |
|||
| |
|||
1: N := N + 2; |
|||
| |
|||
2: |
|||
REPEAT |
|||
N := N + 2 |
|||
UNTIL IsPrime(N) |
|||
END (* CASE *) |
|||
END (* LOOP *) |
|||
END (* FOR *) |
|||
END BrazilianNumbers. |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
First 20 Brazilian numbers: |
|||
7 8 10 12 13 14 15 16 18 20 21 22 24 26 27 28 30 31 32 33 |
|||
First 20 odd Brazilian numbers: |
|||
7 13 15 21 27 31 33 35 39 43 45 51 55 57 63 65 69 73 75 77 |
|||
First 20 prime Brazilian numbers: |
|||
7 13 31 43 73 127 157 211 241 307 421 463 601 757 1093 1123 1483 1723 2551 2801 |
|||
</pre> |
|||
=={{header|Nim}}== |
=={{header|Nim}}== |
||
<syntaxhighlight lang="nim">proc isPrime(n: Positive): bool = |
<syntaxhighlight lang="nim">proc isPrime(n: Positive): bool = |
||
Line 3,169: | Line 3,297: | ||
First 20 prime Brazilian numbers: |
First 20 prime Brazilian numbers: |
||
7, 13, 31, 43, 73, 127, 157, 211, 241, 307, 421, 463, 601, 757, 1093, 1123, 1483, 1723, 2551, 2801</pre> |
7, 13, 31, 43, 73, 127, 157, 211, 241, 307, 421, 463, 601, 757, 1093, 1123, 1483, 1723, 2551, 2801</pre> |
||
=={{header|Pascal}}== |
=={{header|Pascal}}== |
||
{{works with|Free Pascal}} |
{{works with|Free Pascal}} |