Numbers whose count of divisors is prime: Difference between revisions

Content added Content deleted
(Added Algol 68)
(→‎{{header|ALGOL 68}}: No need for a prime sieve - primes have a divisor count of 2.)
Line 18: Line 18:
FOR i FROM 2 TO UPB ndc DO
FOR i FROM 2 TO UPB ndc DO
FOR j FROM i BY i TO UPB ndc DO ndc[ j ] +:= 1 OD
FOR j FROM i BY i TO UPB ndc DO ndc[ j ] +:= 1 OD
OD;
FOR d TO max number DO
INT divisor count = ndc[ d ];
IF divisor count > max divisors THEN max divisors := divisor count FI
OD;
# sieve the primes to max divisors #
[ 1 : max divisors ]BOOL prime;
prime[ 1 ] := FALSE; prime[ 2 ] := TRUE;
FOR i FROM 3 BY 2 TO UPB prime DO prime[ i ] := TRUE OD;
FOR i FROM 4 BY 2 TO UPB prime DO prime[ i ] := FALSE OD;
FOR i FROM 3 BY 2 TO ENTIER sqrt( UPB prime ) DO
IF prime[ i ] THEN FOR s FROM i * i BY i + i TO UPB prime DO prime[ s ] := FALSE OD FI
OD;
OD;
# show the numbers with prime divisor counts #
# show the numbers with prime divisor counts #
Line 36: Line 24:
FOR i TO UPB ndc DO
FOR i TO UPB ndc DO
INT divisor count = ndc[ i ];
INT divisor count = ndc[ i ];
IF ODD divisor count AND prime[ divisor count ] THEN
IF ODD divisor count AND ndc[ divisor count ] = 2 THEN
print( ( whole( i, -8 ) ) );
print( ( whole( i, -8 ) ) );
IF ( p count +:= 1 ) MOD 10 = 0 THEN print( ( newline ) ) FI
IF ( p count +:= 1 ) MOD 10 = 0 THEN print( ( newline ) ) FI