Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's my recursive solution. It works for 2000 elements in about 1.4&nbsp;sec on my tablet:</p> <pre><code>import math def to_onestr(n, numbers=None, divs=None): if numbers is None: numbers = [None] * (n + 1) numbers[0] = ('', False) if divs is None: divs = get_divs(n) if numbers[n] is None: s = str(n) # Default representation is 11111 or 1+1+1+1 if s == '1'*len(s): res = (s, False) else: res = ("+".join(['1'] * n), True) # Find all representations d*k + r, d &lt; k for d in divs: if d &gt;= n: break k, r = divmod(n, d) if k &lt; d: d, k = k, d k_res, r_res, d_res = to_onestr(k, numbers, divs), to_onestr(r, numbers, divs), to_onestr(d, numbers, divs) res_str, res_bool = '', False if d != 1: res_str += '({})*'.format(d_res[0]) if d_res[1] else d_res[0] + '*' res_str += '({})'.format(k_res[0]) if k_res[1] else k_res[0] if d != 1 and len(k_res[0]) * d + d - 1 &lt; len(res_str): res_str = '+'.join([k_res[0]]*d) res_bool = True if r != 0: res_str += '+{}'.format(r_res[0]) res_bool = True if len(res_str) &lt; len(res[0]): res = (res_str, res_bool) numbers[n] = res return numbers[n] def get_divs(n): p = [1] * (n + 1) # Get all prime numbers + all numbers which contains only 1 + all numbers we could get from 11..1 by multiplication for i in range(2, int(math.ceil(math.sqrt(n)))): if p[i] == 1: for j in range(i * i, n, i): if j % i == 0: p[j] = 0 for x in xrange(2, len(str(n)) + 1): i = int('1'*x) j = i while j &lt;= n: p[j] = 1 j = j * i return [i for (i, v) in enumerate(p) if v == 1 and i &gt; 1] </code></pre> <p>Speed testing:</p> <pre><code>&gt;&gt;&gt; timeit('to_onestr(2000)', 'from __main__ import to_onestr', number=1) 1.1375278780336457 &gt;&gt;&gt; timeit('to_onestr(4000)', 'from __main__ import to_onestr', number=1) 3.6481025870678696 &gt;&gt;&gt; timeit('to_onestr(6000)', 'from __main__ import to_onestr', number=1) 7.732885259577177 </code></pre> <p>Also tested @Anonymous approach</p> <pre><code>&gt;&gt;&gt; timeit('minconstruct(2000)', 'from __main__ import minconstruct', number=1) 12.012599471759474 </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload