Data update
This commit is contained in:
parent
0df55f9f24
commit
aec8ed51b6
1045 changed files with 18889 additions and 2777 deletions
68
Task/Arithmetic-numbers/Cowgol/arithmetic-numbers.cowgol
Normal file
68
Task/Arithmetic-numbers/Cowgol/arithmetic-numbers.cowgol
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
include "cowgol.coh";
|
||||
|
||||
const MAX := 13000;
|
||||
|
||||
var divisorSum: uint16[MAX+1];
|
||||
var divisorCount: uint8[MAX+1];
|
||||
|
||||
sub CalculateDivisorSums() is
|
||||
MemZero(&divisorSum[0] as [uint8], @bytesof divisorSum);
|
||||
MemZero(&divisorCount[0] as [uint8], @bytesof divisorCount);
|
||||
|
||||
var div: @indexof divisorSum := 1;
|
||||
while div <= MAX loop
|
||||
var num := div;
|
||||
while num <= MAX loop
|
||||
divisorSum[num] := divisorSum[num] + div;
|
||||
divisorCount[num] := divisorCount[num] + 1;
|
||||
num := num + div;
|
||||
end loop;
|
||||
div := div + 1;
|
||||
end loop;
|
||||
end sub;
|
||||
|
||||
sub NextArithmetic(n: uint16): (r: uint16) is
|
||||
r := n + 1;
|
||||
while divisorSum[r] % divisorCount[r] as uint16 != 0 loop
|
||||
r := r + 1;
|
||||
end loop;
|
||||
end sub;
|
||||
|
||||
sub Composite(n: uint16): (r: uint8) is
|
||||
r := 0;
|
||||
if n>1 and divisorSum[n] != n+1 then
|
||||
r := 1;
|
||||
end if;
|
||||
end sub;
|
||||
|
||||
var current: uint16 := 0;
|
||||
var nth: uint16 := 0;
|
||||
var composites: uint16 := 0;
|
||||
|
||||
CalculateDivisorSums();
|
||||
|
||||
print("First 100 arithmetic numbers:\n");
|
||||
while nth < 10000 loop
|
||||
current := NextArithmetic(current);
|
||||
nth := nth + 1;
|
||||
composites := composites + Composite(current) as uint16;
|
||||
|
||||
if nth <= 100 then
|
||||
print_i16(current);
|
||||
if nth % 5 == 0 then
|
||||
print_nl();
|
||||
else
|
||||
print_char('\t');
|
||||
end if;
|
||||
end if;
|
||||
|
||||
if nth == 1000 or nth == 10000 then
|
||||
print_nl();
|
||||
print_i16(nth);
|
||||
print(": ");
|
||||
print_i16(current);
|
||||
print("\t");
|
||||
print_i16(composites);
|
||||
print(" composites\n");
|
||||
end if;
|
||||
end loop;
|
||||
65
Task/Arithmetic-numbers/Modula-2/arithmetic-numbers.mod2
Normal file
65
Task/Arithmetic-numbers/Modula-2/arithmetic-numbers.mod2
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
MODULE ArithmeticNumbers;
|
||||
FROM InOut IMPORT WriteString, WriteCard, WriteLn;
|
||||
|
||||
CONST
|
||||
Max = 13000;
|
||||
|
||||
VAR
|
||||
divSum: ARRAY [1..Max] OF CARDINAL;
|
||||
divCount: ARRAY [1..Max] OF CHAR;
|
||||
current, count, composites: CARDINAL;
|
||||
|
||||
PROCEDURE CalculateDivisorSums;
|
||||
VAR div, num: CARDINAL;
|
||||
BEGIN
|
||||
FOR num := 1 TO Max DO
|
||||
divSum[num] := 0;
|
||||
divCount[num] := CHR(0)
|
||||
END;
|
||||
|
||||
FOR div := 1 TO Max DO
|
||||
num := div;
|
||||
WHILE num <= Max DO
|
||||
INC(divSum[num], div);
|
||||
INC(divCount[num]);
|
||||
INC(num, div)
|
||||
END
|
||||
END
|
||||
END CalculateDivisorSums;
|
||||
|
||||
PROCEDURE Next(n: CARDINAL): CARDINAL;
|
||||
BEGIN
|
||||
REPEAT INC(n) UNTIL (divSum[n] MOD ORD(divCount[n])) = 0;
|
||||
RETURN n
|
||||
END Next;
|
||||
|
||||
PROCEDURE Composite(n: CARDINAL): BOOLEAN;
|
||||
BEGIN
|
||||
RETURN (n>1) AND (divSum[n] # n+1)
|
||||
END Composite;
|
||||
|
||||
BEGIN
|
||||
CalculateDivisorSums;
|
||||
WriteString("First 100 arithmetic numbers:");
|
||||
WriteLn;
|
||||
|
||||
current := 0;
|
||||
FOR count := 1 TO 10000 DO
|
||||
current := Next(current);
|
||||
IF Composite(current) THEN INC(composites) END;
|
||||
IF count <= 100 THEN
|
||||
WriteCard(current, 5);
|
||||
IF count MOD 10 = 0 THEN WriteLn END
|
||||
END;
|
||||
|
||||
IF (count = 1000) OR (count = 10000) THEN
|
||||
WriteCard(count, 5);
|
||||
WriteString(": ");
|
||||
WriteCard(current, 5);
|
||||
WriteString(", ");
|
||||
WriteCard(composites, 5);
|
||||
WriteString(" composites");
|
||||
WriteLn
|
||||
END;
|
||||
END
|
||||
END ArithmeticNumbers.
|
||||
Loading…
Add table
Add a link
Reference in a new issue