Skip to main content
added 3 characters in body
Source Link
Bob Hanlon
  • 167.4k
  • 7
  • 82
  • 213
Clear["Global`*"] g = 100; t1 = Table[{2^x*3^y*5^z*7^u}, {u, 0, Log[7, g]}, {z, 0, Log[5, g/(7^u)]}, {y, 0, Log[3, g/(7^u*5^z)]}, {x, 0, Log[2, g/(7^u*5^z*3^y)]}]; t2 = Sort[Flatten[t1]] (* {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, \ 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 75, 80, \ 81, 84, 90, 96, 98, 100} *) 

Generalizing to n primes

smooth[n_Integer?Positive, g_Integer?Positive] := Module[{a, func, factors, iterators, primes = Prime /@ Range[n], vars = Array[a, n]}, func = Times @@ (primes^vars); factors = #[[1]]^#[[2]] & /@ Transpose[{primes, vars}]; iterators = {#[[1]], 0, Log[#[[2]], #[[3]]]} & /@ Transpose[{ Reverse@vars, Reverse@primes, g/FoldList[Times, 1, Most@Reverse@factors]}]; Table[func, Evaluate[Sequence @@ iterators]] // Flatten // Sort // Quiet] 

Checking against original calculations

smooth[4, g] == t2 (* True *) 
Clear["Global`*"] g = 100; t1 = Table[{2^x*3^y*5^z*7^u}, {u, 0, Log[7, g]}, {z, 0, Log[5, g/(7^u)]}, {y, 0, Log[3, g/(7^u*5^z)]}, {x, 0, Log[2, g/(7^u*5^z*3^y)]}]; t2 = Sort[Flatten[t1]] (* {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, \ 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 75, 80, \ 81, 84, 90, 96, 98, 100} *) 

Generalizing to n primes

smooth[n_Integer?Positive, g_Integer?Positive] := Module[{func, factors, iterators, primes = Prime /@ Range[n], vars = Array[a, n]}, func = Times @@ (primes^vars); factors = #[[1]]^#[[2]] & /@ Transpose[{primes, vars}]; iterators = {#[[1]], 0, Log[#[[2]], #[[3]]]} & /@ Transpose[{ Reverse@vars, Reverse@primes, g/FoldList[Times, 1, Most@Reverse@factors]}]; Table[func, Evaluate[Sequence @@ iterators]] // Flatten // Sort // Quiet] 

Checking against original calculations

smooth[4, g] == t2 (* True *) 
Clear["Global`*"] g = 100; t1 = Table[{2^x*3^y*5^z*7^u}, {u, 0, Log[7, g]}, {z, 0, Log[5, g/(7^u)]}, {y, 0, Log[3, g/(7^u*5^z)]}, {x, 0, Log[2, g/(7^u*5^z*3^y)]}]; t2 = Sort[Flatten[t1]] (* {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, \ 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 75, 80, \ 81, 84, 90, 96, 98, 100} *) 

Generalizing to n primes

smooth[n_Integer?Positive, g_Integer?Positive] := Module[{a, func, factors, iterators, primes = Prime /@ Range[n], vars = Array[a, n]}, func = Times @@ (primes^vars); factors = #[[1]]^#[[2]] & /@ Transpose[{primes, vars}]; iterators = {#[[1]], 0, Log[#[[2]], #[[3]]]} & /@ Transpose[{ Reverse@vars, Reverse@primes, g/FoldList[Times, 1, Most@Reverse@factors]}]; Table[func, Evaluate[Sequence @@ iterators]] // Flatten // Sort // Quiet] 

Checking against original calculations

smooth[4, g] == t2 (* True *) 
Source Link
Bob Hanlon
  • 167.4k
  • 7
  • 82
  • 213

Clear["Global`*"] g = 100; t1 = Table[{2^x*3^y*5^z*7^u}, {u, 0, Log[7, g]}, {z, 0, Log[5, g/(7^u)]}, {y, 0, Log[3, g/(7^u*5^z)]}, {x, 0, Log[2, g/(7^u*5^z*3^y)]}]; t2 = Sort[Flatten[t1]] (* {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, \ 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 75, 80, \ 81, 84, 90, 96, 98, 100} *) 

Generalizing to n primes

smooth[n_Integer?Positive, g_Integer?Positive] := Module[{func, factors, iterators, primes = Prime /@ Range[n], vars = Array[a, n]}, func = Times @@ (primes^vars); factors = #[[1]]^#[[2]] & /@ Transpose[{primes, vars}]; iterators = {#[[1]], 0, Log[#[[2]], #[[3]]]} & /@ Transpose[{ Reverse@vars, Reverse@primes, g/FoldList[Times, 1, Most@Reverse@factors]}]; Table[func, Evaluate[Sequence @@ iterators]] // Flatten // Sort // Quiet] 

Checking against original calculations

smooth[4, g] == t2 (* True *)