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 |
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 |