<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.4 20241031//EN" "JATS-journalpublishing1-4.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article" dtd-version="1.4" xml:lang="en">
  <front>
    <journal-meta>
      <journal-id journal-id-type="publisher-id">ajcm</journal-id>
      <journal-title-group>
        <journal-title>American Journal of Computational Mathematics</journal-title>
      </journal-title-group>
      <issn pub-type="epub">2161-1211</issn>
      <issn pub-type="ppub">2161-1203</issn>
      <publisher>
        <publisher-name>Scientific Research Publishing</publisher-name>
      </publisher>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.4236/ajcm.2026.162007</article-id>
      <article-id pub-id-type="publisher-id">ajcm-151997</article-id>
      <article-categories>
        <subj-group>
          <subject>Article</subject>
        </subj-group>
        <subj-group>
          <subject>Physics</subject>
          <subject>Mathematics</subject>
        </subj-group>
      </article-categories>
      <title-group>
        <article-title>Algorithm Z1 Accelerated and Parallel Generation of Integer Partitions in Standard Representation Form —Improving the Fastest Existing Algorithm ZS1</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <name name-style="western">
            <surname>Zoghbi</surname>
            <given-names>Antoine</given-names>
          </name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
      </contrib-group>
      <aff id="aff1"><label>1</label> 9226-6642 Quebec Inc., Gatineau, Canada </aff>
      <author-notes>
        <fn fn-type="conflict" id="fn-conflict">
          <p>The author declares no conflicts of interest regarding the publication of this paper.</p>
        </fn>
      </author-notes>
      <pub-date pub-type="epub">
        <day>02</day>
        <month>06</month>
        <year>2026</year>
      </pub-date>
      <pub-date pub-type="collection">
        <month>06</month>
        <year>2026</year>
      </pub-date>
      <volume>16</volume>
      <issue>02</issue>
      <fpage>118</fpage>
      <lpage>142</lpage>
      <history>
        <date date-type="received">
          <day>26</day>
          <month>04</month>
          <year>2026</year>
        </date>
        <date date-type="accepted">
          <day>20</day>
          <month>06</month>
          <year>2026</year>
        </date>
        <date date-type="published">
          <day>23</day>
          <month>06</month>
          <year>2026</year>
        </date>
      </history>
      <permissions>
        <copyright-statement>© 2026 by the authors and Scientific Research Publishing Inc.</copyright-statement>
        <copyright-year>2026</copyright-year>
        <license license-type="open-access">
          <license-p> This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license ( <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link> ). </license-p>
        </license>
      </permissions>
      <self-uri content-type="doi" xlink:href="https://doi.org/10.4236/ajcm.2026.162007">https://doi.org/10.4236/ajcm.2026.162007</self-uri>
      <abstract>
        <p>Algorithm ZS1, which generates integer partitions in <italic>standard</italic><italic>representation</italic> and anti-lexicographic order, was first introduced in Mr. Zoghbi’s Master’s thesis, “<italic>Algorithms</italic><italic>for</italic><italic>Generating</italic><italic>Integer</italic><italic>Partitions</italic>” (University of Ottawa, 1993), and later published in “<italic>Fast</italic><italic>Algorithms</italic><italic>for</italic><italic>Generating</italic><italic>Integer</italic><italic>Partitions</italic>” by Zoghbi and Stojmenović (International Journal of Computer Mathematics, 1998, Vol. 70, pp. 319-332). The algorithm is widely regarded by specialists as one of the most efficient methods for generating integer partitions. Algorithm Z1 is an optimized refinement of ZS1. Experimental results demonstrate that Z1 achieves up to 36% reduction in execution time compared with ZS1 in single-threaded environments. In addition, multi-threaded implementations of both ZS1 and Z1 attain runtime reductions up to an 89% relative to their sequential counterparts, highlighting the significant impact of compiler optimizations and system architecture on overall performance.</p>
      </abstract>
      <kwd-group kwd-group-type="author-generated" xml:lang="en">
        <kwd>Zoghbi</kwd>
        <kwd>Integer</kwd>
        <kwd>Partitions</kwd>
        <kwd>Anti-Lexicographic</kwd>
        <kwd>Standard</kwd>
        <kwd>ZS1</kwd>
        <kwd>Z1</kwd>
        <kwd>Fast</kwd>
        <kwd>Algorithm</kwd>
        <kwd>Sequential</kwd>
        <kwd>Parallel</kwd>
        <kwd>Single-Threaded</kwd>
        <kwd>Multi-Threaded</kwd>
        <kwd>Combinatorics</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec1">
      <title>1. Introduction</title>
      <p>Mr. Zoghbi’s Master’s thesis, Algorithms for Generating Integer Partitions (University of Ottawa, 1993) [<xref ref-type="bibr" rid="B1">1</xref>], together with the subsequent paper Fast Algorithms for Generating Integer Partitions (Zoghbi &amp; Stojmenović, International Journal of Computer Mathematics, 1998, Vol. 70, pp. 319-332) [<xref ref-type="bibr" rid="B2">2</xref>], introduced the ZS1 and ZS2 algorithms. These algorithms quickly gained widespread recognition within the combinatorics community due to their simplicity, efficiency, and strong computational performance [<xref ref-type="bibr" rid="B3">3</xref>]-[<xref ref-type="bibr" rid="B6">6</xref>]. In particular, Algorithm ZS1 has been applied in a broad range of domains, including combinatorics [<xref ref-type="bibr" rid="B7">7</xref>]-[<xref ref-type="bibr" rid="B14">14</xref>], networking, agriculture [<xref ref-type="bibr" rid="B15">15</xref>], music [<xref ref-type="bibr" rid="B6">6</xref>], gaming [<xref ref-type="bibr" rid="B16">16</xref>], healthcare applications such as DNA analysis [<xref ref-type="bibr" rid="B17">17</xref>][<xref ref-type="bibr" rid="B18">18</xref>], civil engineering [<xref ref-type="bibr" rid="B19">19</xref>], and other areas.</p>
      <p>The network graphs shown in <xref ref-type="fig" rid="fig1">Figure 1</xref> illustrate representative partition structures of the integer 10, where nodes correspond to parts and edges represent their associated values. For clarity, only a subset of the complete set of partitions is displayed.</p>
      <fig id="fig1">
        <label>Figure 1</label>
        <graphic xlink:href="https://html.scirp.org/file/1101215-rId13.jpeg?20260623115937" />
      </fig>
      <p><bold>Figure 1</bold><bold>.</bold> Mapping graphs into partitions.</p>
      <p>This paper presents several contributions:</p>
      <p>Algorithm Z1, which efficiently processes partitions whose rightmost part is 3 followed, when applicable, by a sequence of 1’s, thereby eliminating iterative processing for a substantial subset of cases. A direct concatenation strategy in Algorithm Z1 for subset cases where the rightmost part equals 3, thereby avoiding unnecessary intermediate steps and reducing computational overhead.Algorithm Z3, designed to generate fairly balanced and well-distributed subsets of partitions. A batch-processing mechanism that automatically initiates and manages parallel threads. </p>
      <p>Algorithm Z1 (formerly AZ1), implemented in <italic>standard</italic><italic>representation</italic> form and anti-lexicographic order as described in Section 6, achieves performance improvements of up to 36% in single-threaded execution and up to 89% in multi-threaded execution on identical hardware, compared with Algorithm ZS1.</p>
      <p>Algorithms ZS1 and Z1 were evaluated on a single system using a multi-threaded execution model in which the partition space was divided into disjoint subsets according to ranges of the largest part.</p>
      <p>All reported performance measurements exclude output operations.</p>
    </sec>
    <sec id="sec2">
      <title>2. Partitions with Parts 2 and 3</title>
      <p>The number of integer partitions <italic>P</italic>(<italic>n</italic>) grows exponentially as <italic>n</italic> increases. As shown in <bold>Table 1</bold>, the proportion of partitions whose leftmost part is 2 or 3 followed, when applicable, by a sequence of 1 s, also increases steadily with <italic>n</italic>.</p>
      <p><bold>Table 1</bold><bold>.</bold> Count_2 &amp; 3 (<italic>x</italic> ≤ 3) percentage released from iterations.</p>
      <table-wrap id="tbl1">
        <label>Table 1</label>
        <table>
          <tbody>
            <tr>
              <td>n</td>
              <td># of partitionsP(n)</td>
              <td>Count_2(ZS1)</td>
              <td>Count_2%(ZS1)</td>
              <td>Count_3(Z1)</td>
              <td>
                Count_3 (
                <italic>x</italic>
                ≤ 3)(Z1)
              </td>
              <td>
                Count_2 &amp; 3 (
                <italic>x</italic>
                ≤ 3)(Z1)
              </td>
              <td>
                Count_2 &amp; 3 (
                <italic>x</italic>
                ≤ 3)% (Z1)
              </td>
            </tr>
            <tr>
              <td>10</td>
              <td>42</td>
              <td>22</td>
              <td>52.38%</td>
              <td>8</td>
              <td>6</td>
              <td>28</td>
              <td>66.67%</td>
            </tr>
            <tr>
              <td>50</td>
              <td>204,226</td>
              <td>147,273</td>
              <td>72.11%</td>
              <td>35,620</td>
              <td>16,942</td>
              <td>164,215</td>
              <td>80.41%</td>
            </tr>
            <tr>
              <td>100</td>
              <td>190,569,292</td>
              <td>150,198,136</td>
              <td>78.82%</td>
              <td>28,579,511</td>
              <td>10,681,693</td>
              <td>160,879,829</td>
              <td>84.42%</td>
            </tr>
            <tr>
              <td>120</td>
              <td>1,844,349,560</td>
              <td>1,482,074,143</td>
              <td>80.36%</td>
              <td>263,565,625</td>
              <td>92,092,200</td>
              <td>1,574,166,343</td>
              <td>85.35%</td>
            </tr>
            <tr>
              <td>150</td>
              <td>40,853,235,313</td>
              <td>33,549,419,497</td>
              <td>82.12%</td>
              <td>5,479,813,969</td>
              <td>1,759,520,420</td>
              <td>35,308,939,917</td>
              <td>86.43%</td>
            </tr>
            <tr>
              <td>160</td>
              <td>107,438,159,466</td>
              <td>88,751,778,802</td>
              <td>82.61%</td>
              <td>14,137,782,672</td>
              <td>4,428,070,930</td>
              <td>93,179,849,732</td>
              <td>86.73%</td>
            </tr>
            <tr>
              <td>170</td>
              <td>274,768,617,130</td>
              <td>228,204,732,751</td>
              <td>83.05%</td>
              <td>35,500,619,847</td>
              <td>10,860,692,344</td>
              <td>239,065,425,095</td>
              <td>87.01%</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <p>Breakdown of the cases in which the leftmost part equals 3, followed, when applicable, by a sequence of 1 s. In <bold>Table 2</bold>, <italic>x</italic> denotes the number of 1 s following part 3 in a given partition.</p>
      <p><bold>Table 2</bold><bold>.</bold> Leftmost part 3 Breakdown.</p>
      <table-wrap id="tbl2">
        <label>Table 2</label>
        <table>
          <tbody>
            <tr>
              <td>n</td>
              <td>Count_3</td>
              <td>
                <italic>x</italic>
                = 0
              </td>
              <td>
                <italic>x</italic>
                = 1
              </td>
              <td>
                <italic>x</italic>
                = 2
              </td>
              <td>
                <italic>x</italic>
                = 3
              </td>
              <td>
                <italic>x</italic>
                &gt; 3
              </td>
              <td>
                <italic>x</italic>
                &gt; 3%
              </td>
              <td>
                Count_3 (
                <italic>x</italic>
                ≤ 3)
              </td>
            </tr>
            <tr>
              <td>10</td>
              <td>8</td>
              <td>2</td>
              <td>2</td>
              <td>1</td>
              <td>1</td>
              <td>2</td>
              <td>25.00%</td>
              <td>6</td>
            </tr>
            <tr>
              <td>50</td>
              <td>35,620</td>
              <td>5237</td>
              <td>4510</td>
              <td>3872</td>
              <td>3323</td>
              <td>18,678</td>
              <td>52.44%</td>
              <td>16,942</td>
            </tr>
            <tr>
              <td>100</td>
              <td>28,579,511</td>
              <td>3,134,927</td>
              <td>2,803,342</td>
              <td>2,505,329</td>
              <td>2,238,095</td>
              <td>17,897,818</td>
              <td>62.62%</td>
              <td>10,681,693</td>
            </tr>
            <tr>
              <td>120</td>
              <td>263,565,625</td>
              <td>26,708,042</td>
              <td>24,089,760</td>
              <td>21,719,314</td>
              <td>19,575,084</td>
              <td>171,473,425</td>
              <td>65.06%</td>
              <td>92,092,200</td>
            </tr>
            <tr>
              <td>150</td>
              <td>5,479,813,969</td>
              <td>503,415,815</td>
              <td>458,522,902</td>
              <td>417,514,127</td>
              <td>380,067,576</td>
              <td>3,720,293,549</td>
              <td>67.89%</td>
              <td>1,759,520,420</td>
            </tr>
            <tr>
              <td>160</td>
              <td>14,137,782,672</td>
              <td>1,262,212,193</td>
              <td>1,152,724,706</td>
              <td>1,052,460,914</td>
              <td>960,673,117</td>
              <td>9,709,711,742</td>
              <td>68.68%</td>
              <td>4,428,070,930</td>
            </tr>
            <tr>
              <td>170</td>
              <td>35,500,619,847</td>
              <td>3,085,272,563</td>
              <td>2,824,542,959</td>
              <td>2,585,233,667</td>
              <td>2,365,643,155</td>
              <td>24,639,927,503</td>
              <td>69.41%</td>
              <td>10,860,692,344</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
    </sec>
    <sec id="sec3">
      <title>3. Algorithms ZS1 and Z1</title>
      <sec id="sec3dot1">
        <title>3.1. General Overview</title>
        <p>For all performance evaluations presented in this document, including both single-threaded experiments in Section 3 and the multi-threaded experiments in Section 5, the following methodology was applied:</p>
        <p>Each benchmark was executed at least three times, and the reported results correspond to the average execution time.Execution time was measured in nanoseconds by recording timestamps at the beginning and end of each run. All programs were compiled exclusively using the MSYS MinGW64 compiler.Benchmarks were performed on an AMD Ryzen 7 5800HS system (8 cores, 16 threads, 16 GB RAM). Output operations were disabled during benchmarking by commenting them out using “//” in C language. Performance improvements were determined by comparing the measured execution times. Algorithms ZS1 and Z1 generate each partition exactly once in <italic>standard</italic><italic>representation</italic> form and anti-lexicographic order. Algorithms ZS1 and Z1 generate partitions within the bounded range [<italic>X</italic>1, <italic>X</italic>2], where <italic>n</italic> ≥ <italic>X</italic>2 ≥ <italic>X</italic>1 ≥ 1 for any given integer <italic>n.</italic></p>
      </sec>
      <sec id="sec3dot2">
        <title>3.2. Algorithm ZS1</title>
        <p>Input integer -&gt; n;</p>
        <p>Input lowest value of leftmost part -&gt; x1;</p>
        <p>Input highest value of leftmost part -&gt; x2;</p>
        <p>If (x1 = 1) then {x1 ⇓ 2};</p>
        <p>For I ⇓ 0 to n do a[i] ⇓ 1;</p>
        <p>A[1] ⇓ x2+1; h ⇓ 1; m ⇓ n – x2; x ⇓ 0;</p>
        <p>A[1] ⇓ n; h ⇓ 1; m ⇓ 1; x ⇓ 0;</p>
        <p>While(a[1]&gt;=x1) do <bold>{</bold></p>
        <p> If (a[h] = 2) then <bold>{</bold>m ⇓ m + 1, a[h] ⇓ 1; h ⇓ h – 1;<bold>}</bold></p>
        <p> else <bold>{</bold></p>
        <p> t ⇓ m – h + 1; a[h] ⇓ a[h] – 1; r ⇓ a[h];</p>
        <p> while (t &gt;= r) do <bold>{</bold>h ⇓ h + 1; a[h] ⇓ r; t ⇓ t – r;<bold>}</bold></p>
        <p> if (t &lt; 2) then <bold>{</bold>m ⇓ h + t;}</p>
        <p> else <bold>{</bold> m ⇓ h + 1; h ⇓ h + 1; a[h] ⇓ t;<bold>}</bold></p>
        <p><bold>}</bold></p>
        <p> if (a[1] &gt;= x1) then <bold>{</bold>for i ⇓ 1 to m do output a[i];<bold>}</bold></p>
        <p><bold>}</bold></p>
        <p>if (a[1] == 1) then <bold>{</bold>for i ⇓ 1 to n do output a[i];<bold>}</bold></p>
        <p>Algorithm ZS1 was extended to allow users to specify explicit lower [X1] and upper [X2] bounds on the leftmost part of a partition, thereby restricting the generation process to a selected subset of the integer partitions of <italic>n</italic>. The algorithm processes partition whose rightmost nonunit part equals 2 with exceptional efficiency: in such case, the successor partition is generated using only three elementary operations. This behavior confirms that Algorithm ZS1 satisfies a constant average delay property established in <italic>Fast</italic><italic>Algorithms</italic><italic>for</italic><italic>Generating</italic><italic>Integer</italic><italic>Partitions</italic>.</p>
        <p>As a result, Algorithm ZS1 remains the fastest known algorithm in its class and continues to be widely used. furthermore, as <italic>n</italic> increases, the proportion of partitions containing at least one part equal to 2 followed, when applicable by a sequence of 1’s grows significantly, as illustrated in <bold>Table 1</bold>.</p>
        <p>For <italic>n</italic> = 50, 72.11% of the partitions end with a 2 followed, when applicable by a sequence of 1 s.For <italic>n</italic> = 170, this proportion increases to 83.05%.</p>
        <p>Consequently, as <italic>n</italic> becomes larger, this behavior helps explain the strong empirical performance and scalability of Algorithm ZS1.</p>
      </sec>
      <sec id="sec3dot3">
        <title>3.3. Algorithm Z1</title>
        <p>Algorithm Z1 is an optimized variant of ZS1, designed to accelerate the generation of integer partitions in <italic>standard</italic><italic>representation</italic> form and anti-lexicographic order. It supports explicit lower [X1] and upper [X2] bounds on the leftmost part, enabling restricted-range generation without altering the core structure of the algorithm. Its principal enhancement is a specialized fast path for partitions whose rightmost part is 3 followed, when applicable, by a sequence of 1 s. For the subset of cases 3 (<italic>x</italic> ≤ 3), illustrated in <bold>Table 1</bold> and <bold>Table</bold><bold>2</bold>, this optimization eliminates the iterative redistribution loop used in Algorithm ZS1.</p>
        <p>Algorithm Z1 handles such partitions by directly redistributing the rightmost 3 and propagating the transformation until all 3 s and any intermediate 2 s are reduced to 1 s. For example, for <italic>n</italic> = 10, the partition (4, 3, 3), triggers case <italic>x</italic> = 0, producing the sequence:</p>
        <p>(4,3,2,1),  (4,3,1,1,1),  </p>
        <p>In the final partition, the trailing 3 reappears immediately before the block of 1 s, triggering case <italic>x</italic> = 3. Algorithm Z1 then directly generates:</p>
        <p>(4,2,2,2),  (4,2,2,1,1),  (4,2,1,1,1,1),  (4,1,1,1,1,1,1).</p>
        <p><bold>Algorithm</bold><bold>Z1</bold></p>
        <p>Input integer -&gt; n;</p>
        <p>Input lowest value of leftmost part -&gt; x1;</p>
        <p>Input highest value of leftmost part -&gt; x2;</p>
        <p>If (x1 = 1) then {x1 ⇓ 2;};</p>
        <p>For I ⇓ 0 to n do a[i] ⇓ 1;</p>
        <p>A[1] ⇓ x2 + 1; h ⇓ 1; m ⇓ n – x2; x ⇓ 0;</p>
        <p>While(a[1]&gt;=x1) do <bold>{</bold></p>
        <p> While(a[h] = 2) do <bold>{</bold></p>
        <p> m ⇓ m+1, a[h] ⇓ 1; h ⇓ h – 1;</p>
        <p> for i ⇓ 1 to m do output a[i];</p>
        <p><bold>}</bold></p>
        <p> if (a[h] = 3) then <bold>{</bold></p>
        <p> x ⇓ m – h; a[h] ⇓ 2;</p>
        <p> if (x &gt; 3) then <bold>{</bold></p>
        <p> while (x &gt; 0) do <bold>{</bold>h ⇓ h+1; a[h] ⇓ 2; x ⇓ x – 2;<bold>}</bold></p>
        <p> if (x=0) then <bold>{</bold>m ⇓ h + 1;<bold>}</bold></p>
        <p> else <bold>{</bold>m ⇓ h;<bold>}</bold></p>
        <p><bold>}</bold></p>
        <p> else if (x = 0) then <bold>{</bold> // m=h </p>
        <p> m ⇓ m + 1;</p>
        <p> for i ⇓ 1 to m do output a[i];</p>
        <p> a[h] ⇓ 1; h ⇓ h – 1; m ⇓ m + 1;</p>
        <p><bold>}</bold></p>
        <p> else if (x = 1) then <bold>{</bold></p>
        <p> for i ⇓ 1 to h do output a[i]; output “ 2”;</p>
        <p> for i ⇓ 1 to h do output a[i]; output “ 1 1”;</p>
        <p> a[h] ⇓ 1; h ⇓ h – 1; m ⇓ m + 2;<bold>}</bold></p>
        <p> else if (x =2) then <bold>{</bold></p>
        <p> for i ⇓ 1 to h do output a[i]; output “ 2 1”;</p>
        <p> for i ⇓ 1 to h do output a[i]; output “ 1 1 1”;</p>
        <p> a[h] ⇓ 1; h ⇓ h – 1; m ⇓ m + 2;<bold>}</bold></p>
        <p> else <bold>{</bold> // x=3</p>
        <p> for i ⇓ 1 to h do output a[i]; output “ 2 2”;</p>
        <p> for i ⇓ 1 to h do output a[i]; output “ 2 1 1”;</p>
        <p> for i ⇓ 1 to h do output a[i]; output “ 1 1 1 1”;</p>
        <p> a[h] ⇓ 1; h ⇓ h – 1; m ⇓ m + 2;</p>
        <p><bold>}</bold></p>
        <p> // for all cases x=0, x=1, x=2, x=3</p>
        <p> for i ⇓ 1 to m do output a[i];</p>
        <p><bold>}</bold> /* a[h] =3 */</p>
        <p> else if (a[h] &gt; 3) then <bold>{</bold></p>
        <p> t ⇓ m – h + 1; a[h] ⇓ a[h] – 1; r ⇓ a[h]</p>
        <p> while (t &gt;= r) do <bold>{</bold>h ⇓ h+1; a[h] ⇓ r; t ⇓ t – r<bold>}</bold></p>
        <p> if (t &lt;2) then <bold>{</bold>m ⇓ h + t;}</p>
        <p> else <bold>{</bold> m ⇓ h + 1; h ⇓ h + 1; a[h] ⇓ t;<bold>}</bold></p>
        <p> for i ⇓ 1 to m do output a[i];</p>
        <p><bold>}</bold> /* a[h] &gt; 3 */</p>
        <p><bold>}</bold> /* while a[1] &gt;= x1 */</p>
        <p>Each output partition is constructed by concatenating a fixed prefix with suffixes obtained through redistribution of the rightmost 3. For example, when <italic>n</italic> = 11, the partition (4, 3, 2, 2), has prefix (4, 3) which is then combined with all partitions generated from redistributing (2, 2), such as (2, 1, 1) and (1, 1, 1, 1), yielding:</p>
        <p>(4, 3, 2, 1, 1),  (4, 3, 1, 1, 1, 1).</p>
        <p>This direct concatenation mechanism eliminates repeated state reconstruction and reduces several inner-loop transitions, resulting in an additional efficiency gain of approximately 5%. For <italic>n</italic><italic>=</italic> 170, this increases the overall performance improvement to approximately 89%.</p>
        <p>By explicitly handling rightmost 3 (<italic>x</italic> ≤ 3) structures, algorithm Z1 removes the most computationally expensive iterative steps present in algorithm ZS1, leading to significantly lower average delay and improved empirical performance. As a result, only rightmost 3 (<italic>x</italic> &gt; 3) structures remain within the iterative process.</p>
        <p>Algorithm Z1 further accelerates partition generation by optimizing cases in which the rightmost structure consists of a 2 or 3 (<italic>x</italic> ≤ 3), followed by any number of 1 s.</p>
        <p>For <italic>n</italic> = 170, Algorithm Z1 produces:</p>
        <p>207,202,977,471 partitions where the rightmost part is 2 before the trailing block of 1 s.31,862,447,624 partitions where the rightmost part is 3 (<italic>x</italic> ≤ 3) before the trailing block of 1 s. <bold>Table 1</bold> shows that Count_3 (<italic>x</italic> ≤ 3) = 10,860,692,344 which are processed in batches to generate 31,862,447,624 partitions.</p>
        <p>In comparison, Algorithm ZS1 generates 228,204,732,751 such partitions ending in 2. The difference</p>
        <p>228,204,732,751 − 207,202,977,471 = 21,001,755,280 </p>
        <p>corresponds to partitions in which a 2 is created exclusively through the processing of rightmost 3 (<italic>x</italic> ≤ 3) structures. Algorithm Z1 handles these cases collectively whenever a rightmost 3 (<italic>x</italic> ≤ 3) is encountered, thereby improving efficiency. For clarification (21,001,755,280 + 10,860,692,344 = 31,862,447,624).</p>
        <p>For <italic>n</italic> = 150, Algorithm Z1 increases the proportion of special-case partitions from 82.12% (ZS1) to 86.43% (Z1).</p>
        <p>For <italic>n</italic> = 170, this proportion rises from 83.05% (ZS1) to 87.01% (Z1). Refer to <bold>Table 1</bold>.</p>
        <p>These results show that as <italic>n</italic> increases, partitions whose rightmost parts equal to 2 or 3 (<italic>x</italic> ≤ 3) constitute an increasingly large share of all partitions.</p>
        <p>For <italic>n</italic> = 170, as shown in <bold>Table 3</bold>, algorithm ZS1 required 1099.354004 seconds in a single-threaded execution, whereas algorithm Z1 completed the same task in 696.825012 seconds, representing a 36.38% reduction in execution time.</p>
        <p><bold>Table 3</bold><bold>.</bold> Z1 Time saving seconds percentage.</p>
        <table-wrap id="tbl3">
          <label>Table 3</label>
          <table>
            <tbody>
              <tr>
                <td>Integer</td>
                <td>ZS1 Time Sec</td>
                <td>Z1 Time Sec</td>
                <td>Z1 Time Reduction (Sec) %</td>
                <td>Z1 Time Saving Sec %</td>
              </tr>
              <tr>
                <td>50</td>
                <td>0.000000</td>
                <td>0.000000</td>
                <td>0.00%</td>
                <td>0.00%</td>
              </tr>
              <tr>
                <td>100</td>
                <td>0.734000</td>
                <td>0.508000</td>
                <td>69.21%</td>
                <td>30.79%</td>
              </tr>
              <tr>
                <td>150</td>
                <td>151.744003</td>
                <td>104.516998</td>
                <td>68.88%</td>
                <td>31.12%</td>
              </tr>
              <tr>
                <td>170</td>
                <td>1099.354004</td>
                <td>696.825012</td>
                <td>63.38%</td>
                <td>36.62%</td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>When evaluated using the MSYS MinGW64 compiler on an Intel<sup>TM</sup> Core i7-12700H (2.3 GHz), performance tests for <italic>n</italic>= 150 show that algorithm ZS1 required 522.903992 seconds in a sequential run, whereas algorithm Z1 completed the same task in 297.003902 seconds, representing 43.20% reduction in execution time. </p>
        <p>These results indicate that the performance advantages of Algorithm Z1 are influenced by both hardware configuration and compiler environment. </p>
        <p>Constant Average Delay Property for Algorithm Z1</p>
        <p>Algorithm Z1 is organized into three components for generating the partitions of a given <italic>n</italic>:</p>
        <p>Generation of partitions with leftmost part equal 2 (followed, if applicable, by 1 s) Generation of partitions with leftmost part equal 3 (followed, if applicable, by 1 s) Generation of partitions with leftmost part greater than 3 </p>
        <p>For partitions whose leftmost part is 2, the generation procedure is identical to that of the original Algorithm ZS1 and requires no modification.</p>
        <p>For partitions with leftmost part greater than 3, consider for example <italic>n</italic> = 17 with the partition </p>
        <p>(4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1). </p>
        <p>The next partition generated is </p>
        <p>(3, 3, 3, 3, 3, 2). </p>
        <p>In this case, the loop redistributes the 1 s <italic>t</italic> = <italic>n</italic> − <italic>p</italic> = 17 − 4 = 13, using parts of size <italic>p</italic> = 4 − 1 = 3, followed by a minor adjustment. The number of iterations is therefore approximately ⌊13/3⌋, plus a constant term, resulting in about five iterations. As the size of the redistributed part <italic>p</italic> increases, the number of required iterations decreases. </p>
        <p>For example, when <italic>n</italic> = 17, if the leftmost part is 10 instead of 4, the partition</p>
        <p>(10, 1, 1, 1, 1, 1, 1, 1) </p>
        <p>is transformed into</p>
        <p>(9, 8), </p>
        <p>requiring only a single iteration. The leftmost part 9, is obtained by decrementing 10, by 1. Each iteration of the while loop performs a constant number of operations, approximately three.</p>
        <p>The most computationally expensive iterations occur when a part of size <italic>p</italic> = 4 is redistributed into parts of size 3, In this situation, the number of loop iterations is on the order of</p>
        <p><italic>W</italic> = ⌊(<italic>t</italic> + 1)/(<italic>p</italic> − 1)⌋ + <italic>S</italic>).</p>
        <p>where, <italic>S</italic> = 0 if (⌊(<italic>t</italic> + 1)/(<italic>p</italic> − 1)⌋ mod 0) = 0,</p>
        <p><italic>S</italic> = 1 if (⌊(<italic>t</italic> + 1)/(<italic>p</italic> − 1)⌋ mod 0) &gt; 0</p>
        <p>Consequently, the total number of instructions <italic>C</italic> required to generate the next partition, including loop execution, termination, and trailing conditional operations, can be expressed as follows:</p>
        <p><italic>U</italic>= 3 (instructions per partition generation),</p>
        <p><italic>Q</italic> = 3 (termination and trailing conditions)</p>
        <p><italic>C</italic> = ((⌊(<italic>t</italic> + 1)/(<italic>p</italic> − 1)⌋ + <italic>S</italic>) * <italic>U</italic> + <italic>Q</italic></p>
        <p>or equivalently,</p>
        <p><italic>C</italic> = <italic>W</italic> * <italic>U</italic> + <italic>Q</italic>.</p>
        <p>For partitions whose leftmost part is 3, we consider the cases 3 (<italic>x</italic> ≤ 3), where x denotes the number of trailing 1 s. In these cases, the iterative procedure is replaced by a constant number of instructions (at most ten), including the conditional branching to determine the correct generation path. Each case produces a small batch of partitions via direct concatenation, without arithmetic iteration. When <italic>x</italic> = 3, four partitions are generated; when <italic>x</italic> = 2 or <italic>x</italic> = 1, three partitions are generated; and when <italic>x</italic> = 0, two partitions are generated. This yields an upper bound of <italic>C</italic> = 10 operations per generated partition.</p>
        <p>When <italic>x</italic> &gt; 3, the iterative procedure is again required, and the same expression <italic>C</italic> = <italic>W</italic> * <italic>U</italic> + <italic>Q</italic> applies. </p>
        <p>Therefore, the most computational expensive iterations occur when <italic>t</italic> = <italic>n</italic> − 3 and <italic>p</italic> = 3, giving</p>
        <p><italic>C</italic> = (⌊((<italic>n</italic> − 3) +1)/2⌋ + <italic>S</italic>) * 3 + 3.</p>
        <p>For example, when <italic>n</italic> = 15, the partition </p>
        <p>(3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) </p>
        <p>generates the partition </p>
        <p>(2, 2, 2, 2, 2, 2, 2, 1), using</p>
        <p><italic>C</italic> = ((12 + 1)/2 + 1) * 3 + 3. <italic>C</italic> = 7 * 3 + 3. <italic>C</italic> = 24.</p>
        <p>Let RP(<italic>n</italic>, <italic>m</italic>) denote the number of restricted partitions of <italic>n</italic> using at most <italic>m</italic> parts.</p>
        <p>Lemma 1 and Theorem 1 are taken from my paper “<italic>Fast</italic><italic>Algorithms</italic><italic>for</italic><italic>Generating</italic><italic>Integer</italic><italic>Partitions</italic>”. [<xref ref-type="bibr" rid="B2">2</xref>]</p>
        <p><bold>Lemma</bold><bold>1</bold>. RP(<italic>n</italic>, L2) ≥ <italic>n</italic><sup>2</sup>/12 for L2 ≥ 3.</p>
        <p><bold>Proof.</bold> Since RP(<italic>n</italic>, L2) ≥ RP(<italic>n</italic>, 3) for L2 &gt; 3, it is sufficient to prove RP(<italic>n</italic>, 3) ≥ <italic>n</italic><sup>2</sup>/12. In the <italic>multiplicity</italic><italic>representation</italic>, the partitions RP(<italic>n</italic>, 3) are the following kind: <italic>n</italic> = 3<italic>c</italic><sub>1</sub> + 2<italic>c</italic><sub>2</sub> + 1<italic>c</italic><sub>3</sub> (<italic>i.e.</italic><italic>y</italic><sub>1</sub> = 3, <italic>y</italic><sub>2</sub> = 2, <italic>y</italic><sub>3</sub> = 1). The number of such partitions is equal to the number of the solutions of the above equation. Clearly 0 ≤ <italic>c</italic><sub>1</sub> ≤ ⌊n/3⌋. For each <italic>c</italic><sub>1</sub> in the interval we solve the equation 2<italic>c</italic><sub>2</sub> + <italic>c</italic><sub>3</sub> = <italic>n</italic> – 3<italic>c</italic><sub>1</sub>. This equation has a unique solution c<sub>3</sub> for each <italic>c</italic><sub>2</sub>, 0 ≤ <italic>c</italic><sub>2</sub> ≤ ⌊n − 3<italic>c</italic><sub>1</sub>/2⌋. Therefore, for fixed c<sub>1</sub>, the number of solutions is (⌊<italic>n</italic> − 3<italic>c</italic><sub>1</sub>)/2⌋ + 1 ≥ (<italic>n</italic> − 3<italic>c</italic><sub>1</sub>)/2. Taking values of c<sub>1</sub> into account, the number of solutions is ≥<italic>n</italic>/2 + (<italic>n</italic> − 3)/2 + (<italic>n</italic> − 6)/2 + … + (<italic>n</italic> − 3⌊<italic>n</italic>/3⌋)/2 = (⌊<italic>n</italic>/3⌋ + 1)<italic>n</italic>/2 − ⌊<italic>n</italic>/3(<italic>n</italic>⌊/3⌋ + 1)3/4 = (⌊<italic>n</italic>/3⌋ + 1)(<italic>n</italic>/2 − ⌊<italic>n</italic>/3⌋3/4) ≥ (⌊<italic>n</italic>/3⌋ + 1)(<italic>n</italic>/2 − <italic>n</italic>/4) ≥ <italic>n</italic><sup>2</sup>/12.</p>
        <p><bold>Theorem</bold><bold>1.</bold> Algorithms ZS1 and Z1 generate unrestricted integer partitions in <italic>Standard</italic><italic>representation</italic> with constant average delay, exclusive of the output.</p>
        <p><bold>Proof.</bold> Consider <italic>x</italic><italic><sub>i</sub></italic> ≥ 3 in the current partition. It received its value after a backtracking search (starting from the last part) was performed to find an index <italic>j</italic> ≤ <italic>i</italic>, called the turning point, that should change its value by 1 (increase/decrease for anti-lexicographic order) and to update values <italic>x</italic><italic><sub>i</sub></italic> for <italic>j</italic> ≤ <italic>i</italic>. The time to perform both backtracking searches is O(<italic>r</italic><italic><sub>j</sub></italic>) where <italic>r</italic><italic><sub>j</sub></italic> = <italic>n</italic> − <italic>x</italic><sub>1</sub> − <italic>x</italic><sub>2</sub> − … − <italic>x</italic><italic><sub>j</sub></italic> is the remainder to distribute after first j parts are fixed. We decided to change the cost of the backtrack search evenly to all “swept” parts, such that each of them receives constant O(1) time. Part <italic>x</italic><italic><sub>i</sub></italic> will be changed only after a similar backtracking step “swept” over <italic>i</italic>-th part or recognized <italic>i</italic>-th part as the turning point (note that <italic>i</italic>-th part is the turning point at least one of the two backtracking steps). There are RP(<italic>r</italic><italic><sub>i</sub></italic>, <italic>x</italic><italic><sub>i</sub></italic>) such partitions which all keep <italic>x</italic><italic><sub>i</sub></italic> intact. For <italic>x</italic><italic><sub>i</sub></italic> ≥ 3 the number of such partitions, according to Lemma 1, is ≥<italic>r</italic><italic><sub>i</sub></italic><sup>2</sup>/12. Therefore, the average number of operations that are performed by such part <italic>i</italic> during the “run” of RP(<italic>r</italic><italic><sub>i</sub></italic>, <italic>x</italic><italic><sub>i</sub></italic>), including the change of its value, is O(1)/RP(<italic>r</italic><italic><sub>i</sub></italic>, <italic>x</italic><italic><sub>i</sub></italic>) ≤ O(1)/<italic>r</italic><italic><sub>i</sub></italic><sup>2</sup> = O(1/<italic>r</italic><italic><sub>i</sub></italic><sup>2</sup>) &lt; <italic>q</italic><italic><sub>i</sub></italic>/<italic>r</italic><italic><sub>i</sub></italic><sup>2</sup> where <italic>q</italic><italic><sub>i</sub></italic> is a constant. Thus the average number of operations for all parts of size <inline-formula><mml:math><mml:math xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mml="http://www.w3.org/1998/Math/MathML"><mml:mo> ≥ </mml:mo><mml:mi mathvariant="normal"></mml:mi></mml:math></mml:math></inline-formula>3 is ≤<italic>q</italic><sub>1</sub>/<italic>r</italic><sub>1</sub><sup>2</sup> + <italic>q</italic><sub>2</sub>/<italic>r</italic><sub>2</sub><sup>2</sup> + …+ <italic>q</italic><sub>3</sub>/<italic>r</italic><sub>3</sub><sup>2</sup> ≤ <italic>q</italic>(1/<italic>r</italic><sub>1</sub><sup>2</sup> + … + 1/<italic>r</italic><sub>3</sub><sup>2</sup>) &lt; <italic>q</italic>(1/<italic>n</italic><sup>2</sup> + 1/(<italic>n</italic> − 1)<sup>2</sup> + … + 1/1<sup>2</sup>) &lt; 2<italic>q</italic> (the last inequality can be obtained easily by applying integral operation on the last sum), which is a constant. The case in which <italic>x</italic><italic><sub>i</sub></italic> ≤ 2 was not considered. In this case, however, both algorithms ZS1 and Z1 perform a constant number of steps per partition on all such parts. Therefore, the algorithms ZS1 and Z1 have overall constant time average delay.</p>
      </sec>
    </sec>
    <sec id="sec4">
      <title>4. Generating Balanced Distribution Partitions</title>
      <sec id="sec4dot1">
        <title>
          4.1. Algorithm Z3, 8 Threads,
          <italic>n</italic>
          = 150
        </title>
        <p>Algorithm Z3, a refinement of algorithm Z1, as illustrated in <xref ref-type="fig" rid="fig2">Figure 2</xref>, generates a balanced distribution of partition subsets by:</p>
        <fig id="fig2">
          <label>Figure 2</label>
          <graphic xlink:href="https://html.scirp.org/file/1101215-rId14.jpeg?20260623115938" />
        </fig>
        <p><bold>Figure 2</bold><bold>.</bold> Example of algorithm Z3 input/output.</p>
        <p>Dividing the full set of partitions into disjoint subsets.Ensuring that all partitions sharing the same leftmost part are grouped within the same subset.Organizing these subsets to enable efficient parallel or distributed execution.</p>
        <p>The <italic>Partitions</italic><italic>Factor</italic> parameter improves load balancing by enabling a more uniform distribution of partitions across subsets. Each subset is assigned based on the total number of partitions and the number of available threads. Since all partitions sharing the same leftmost part must remain grouped together, any subset boundary that would otherwise divide such a block instead assigns the entire block to the next subset. As a result, the subsets do not contain identical numbers of partitions.</p>
        <p>To facilitate efficient parallel execution, Algorithms Z1 and ZS1 were also adapted to accept input parameters directly from a batch file.</p>
        <p>int main(int arg1, char *argv[]) {</p>
        <p><italic>n</italic> = atoi (argv[3]); <italic>x</italic><sub>1</sub> = atoi (argv[4]); <italic>x</italic><sub>2</sub> = atoi (argv[5]);</p>
        <p>as an example in the batch file Z1a190.16.bat below: <italic>n</italic> = 190, <italic>x</italic><sub>1</sub> = 28, <italic>x</italic><sub>2</sub> = 29 etc….</p>
        <p>Example of batch file: Batch file name: Z1a190.16.bat</p>
        <p>echo Starting launching All scripts in parallel</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 28 29</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 26 27</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 31 32</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 23 24</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 52 190</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 33 34</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 39 41</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 42 45</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 46 51</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 18 20</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 21 22</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 35 36</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 37 38</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 25 25</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 30 30</p>
        <p>start C:/msys64/mingw64/code/Z1a 3 Z1a 190 1 17</p>
        <p>echo Finish launching All scripts in parallel</p>
        <p>Tasks are prioritized according to partition count and estimated execution time, with larger workloads scheduled first in order to reduce startup imbalance and ensure a more even distribution of computational load across threads.</p>
      </sec>
      <sec id="sec4dot2">
        <title>4.2. Hardware Capacity</title>
        <p>Algorithm Z3 computes <italic>P</italic>(<italic>n</italic>) using a single array. For example, for <italic>n</italic> = 200, it produces <italic>P</italic>(200) = 3,972,999,029,388. However, due to hardware and compiler constraints, generating all partitions for this value in a single sequential run is impractical. Empirical tests on an AMD Ryzen 7 5800HS system (8 cores, 16 threads, 16 GB RAM) indicate that the largest value that can be reliably handled on a single system is approximately <italic>n</italic> = 170, although this limit ultimately depends on the available hardware resources. </p>
        <p>For <italic>n</italic> = 190, a complete single-run execution of Algorithm ZS1 resulted in system instability. While sequential execution of individual subsets completed successfully in 6139 seconds, parallel execution of all subsets was not feasible. </p>
        <p>Similarly, for Algorithm Z1 at <italic>n</italic> = 190, a complete single-run execution also proved unstable. However, sequential execution of the subsets completed successfully in 4174 seconds, and parallel execution of all subsets was achievable representing a 32% reduction in total execution time compared with ZS1 (4174 seconds versus 6139 seconds).</p>
        <p>For <italic>n</italic> = 200, generating all partitions in a single run using Algorithm ZS1, was not possible. Although sequential execution of the individual subsets remained feasible, full parallel execution again resulted in instability.</p>
        <p>For Algorithm Z1 at <italic>n</italic> = 200, single-run generation was likewise not achievable; however, sequential execution of the subsets remained stable and provided approximately a 34% performance improvement over Algorithm ZS1. For example, the subset 60 - 200 required 596 seconds under Algorithm ZS1, compared with 393 seconds under algorithm Z1. Full parallel execution of all subsets within a single batch was not stable; consequently, parallel processing was curried out across three batches, although occasional instability was still observed.</p>
      </sec>
    </sec>
    <sec id="sec5">
      <title>5. Empirical Analysis</title>
      <sec id="sec5dot1">
        <title>5.1. Single-Threaded and Multi-Threaded Parallel Execution on the Same Hardware System</title>
        <p>Performance of Algorithms ZS1 and Z1 was evaluated under multi-threaded execution model, where multiple instances of each program were executed concurrently, with each instance responsible for generating a distinct subset of the integer partition space. </p>
        <p>Partition subsets were assigned to threads through iterative tuning to obtain an approximately optimal balance of computational workload across threads.</p>
        <p>5.1.1. Algorithm ZS1, 16 Threads, <italic>n</italic> = 170</p>
        <p>For <italic>n</italic> = 170, as illustrated in <bold>Table 4</bold>, execution using sixteen-thread reduced the runtime from 1099.354 seconds in sequential mode to 157.539 seconds, corresponding to 14.33% of the original runtime and representing a reduction of 85.67%<bold>.</bold> CPU utilization reached 100% at the start of execution and subsequently stabilized at approximately 97%.</p>
        <p>5.1.2. Algorithm Z1, 16 Threads, <italic>n</italic> = 170</p>
        <p>Under identical experimental conditions, as illustrated in <bold>Table 5</bold>, Algorithm Z1 was executed using sixteen parallel threads on the same hardware platform, with each thread assigned a distinct subset of the integer partition space. The parallel</p>
        <p><bold>Table 4</bold><bold>.</bold> Algorithm ZS1, 16 Threads, <italic>n</italic> = 170.</p>
        <table-wrap id="tbl4">
          <label>Table 4</label>
          <table>
            <tbody>
              <tr>
                <td rowspan="2">
                  <italic>n</italic>
                  = 170
                </td>
                <td rowspan="2">Partitions from</td>
                <td rowspan="2">Partitions to</td>
                <td rowspan="2">
                  <italic>P</italic>
                  (
                  <italic>n</italic>
                  )
                </td>
                <td>Single run</td>
                <td>Muti-threaded</td>
                <td>Muti-threaded</td>
                <td>Muti-threaded</td>
              </tr>
              <tr>
                <td>Time Sec</td>
                <td>Time Sec</td>
                <td>Time Start</td>
                <td>Time End</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>1</td>
                <td>170</td>
                <td>274,768,617,130</td>
                <td>1099.354004</td>
                <td>
                </td>
                <td>
                </td>
                <td>
                </td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>49</td>
                <td>170</td>
                <td>19,193,773,961</td>
                <td>74.348999</td>
                <td>140.298004</td>
                <td>8:27:10</td>
                <td>8:29:31</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>43</td>
                <td>48</td>
                <td>17,659,663,004</td>
                <td>67.250000</td>
                <td>127.806999</td>
                <td>8:27:10</td>
                <td>8:29:18</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>39</td>
                <td>42</td>
                <td>19,035,618,336</td>
                <td>71.633003</td>
                <td>138.615000</td>
                <td>8:27:10</td>
                <td>8:29:29</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>36</td>
                <td>38</td>
                <td>19,456,938,801</td>
                <td>72.300003</td>
                <td>140.289993</td>
                <td>8:27:10</td>
                <td>8:29:30</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>34</td>
                <td>35</td>
                <td>15,826,760,953</td>
                <td>58.849998</td>
                <td>116.635002</td>
                <td>8:27:15</td>
                <td>8:29:11</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>32</td>
                <td>33</td>
                <td>18,218,831,388</td>
                <td>67.400002</td>
                <td>133.645004</td>
                <td>8:27:10</td>
                <td>8:29:24</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>30</td>
                <td>31</td>
                <td>20,511,517,482</td>
                <td>75.767998</td>
                <td>147.029007</td>
                <td>8:27:10</td>
                <td>8:29:36</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>28</td>
                <td>29</td>
                <td>22,438,541,109</td>
                <td>82.203003</td>
                <td>
                  <bold>157.539993</bold>
                </td>
                <td>
                  <bold>8:27:09</bold>
                </td>
                <td>
                  <bold>8:29:47</bold>
                </td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>27</td>
                <td>27</td>
                <td>11,732,853,219</td>
                <td>42.695999</td>
                <td>88.816000</td>
                <td>8:27:15</td>
                <td>8:28:43</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>26</td>
                <td>26</td>
                <td>11,913,686,128</td>
                <td>43.589001</td>
                <td>90.138000</td>
                <td>8:27:15</td>
                <td>8:28:45</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>25</td>
                <td>25</td>
                <td>11,941,084,517</td>
                <td>43.752998</td>
                <td>90.412003</td>
                <td>8:27:15</td>
                <td>9:28:45</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>24</td>
                <td>24</td>
                <td>11,791,495,467</td>
                <td>42.509998</td>
                <td>89.194000</td>
                <td>8:27:15</td>
                <td>8:28:44</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>22</td>
                <td>23</td>
                <td>22,340,653,336</td>
                <td>81.047997</td>
                <td>156.395996</td>
                <td>8:27:10</td>
                <td>8:29:46</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>20</td>
                <td>21</td>
                <td>19,325,817,959</td>
                <td>69.013000</td>
                <td>138.604004</td>
                <td>8:27:10</td>
                <td>8:29:28</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>17</td>
                <td>19</td>
                <td>20,544,577,090</td>
                <td>71.592003</td>
                <td>144.625000</td>
                <td>8:27:10</td>
                <td>8:29:34</td>
              </tr>
              <tr>
                <td>ZS1</td>
                <td>1</td>
                <td>16</td>
                <td>12,836,804,380</td>
                <td>43.292999</td>
                <td>92.642998</td>
                <td>8:27:15</td>
                <td>8:28:48</td>
              </tr>
              <tr>
                <td>TOTAL</td>
                <td>
                </td>
                <td>
                </td>
                <td>274,768,617,130</td>
                <td>1007.247001</td>
                <td>
                  <bold>157.539993</bold>
                </td>
                <td>
                  <bold>8:27:09</bold>
                </td>
                <td>
                  <bold>8:29:47</bold>
                </td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p><bold>Table 5</bold><bold>.</bold> Algorithm Z1, 16 Threads, <italic>n</italic> = 170.</p>
        <table-wrap id="tbl5">
          <label>Table 5</label>
          <table>
            <tbody>
              <tr>
                <td rowspan="2">
                  <italic>n</italic>
                  = 170
                </td>
                <td rowspan="2">Partitions from</td>
                <td rowspan="2">Partitions to</td>
                <td rowspan="2">
                  <italic>P</italic>
                  (
                  <italic>n</italic>
                  )
                </td>
                <td>Single run</td>
                <td>Muti-threaded</td>
                <td>Muti-threaded</td>
                <td>Muti-threaded</td>
              </tr>
              <tr>
                <td>Time Sec</td>
                <td>Time Sec</td>
                <td>Time Start</td>
                <td>Time End</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>1</td>
                <td>170</td>
                <td>274,768,617,130</td>
                <td>696.825012</td>
                <td>
                </td>
                <td>
                </td>
                <td>
                </td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>49</td>
                <td>170</td>
                <td>19,193,773,961</td>
                <td>51.344002</td>
                <td>113.330002</td>
                <td>8:15:05</td>
                <td>8:16:58</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>43</td>
                <td>48</td>
                <td>17,659,663,004</td>
                <td>46.152000</td>
                <td>101.664001</td>
                <td>8:15:05</td>
                <td>8:16:49</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>39</td>
                <td>42</td>
                <td>19,035,618,336</td>
                <td>49.728001</td>
                <td>111.119003</td>
                <td>8:15:10</td>
                <td>8:17:01</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>36</td>
                <td>38</td>
                <td>19,456,938,801</td>
                <td>50.187000</td>
                <td>113.459999</td>
                <td>8:15:05</td>
                <td>8:16:58</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>34</td>
                <td>35</td>
                <td>15,826,760,953</td>
                <td>40.425999</td>
                <td>94.254997</td>
                <td>8:15:05</td>
                <td>8:16:39</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>32</td>
                <td>33</td>
                <td>18,218,831,388</td>
                <td>46.551998</td>
                <td>105.808998</td>
                <td>8:15:05</td>
                <td>8:16:51</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>30</td>
                <td>31</td>
                <td>20,511,517,482</td>
                <td>53.355000</td>
                <td>119.105003</td>
                <td>8:15:05</td>
                <td>8:17:04</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>28</td>
                <td>29</td>
                <td>22,438,541,109</td>
                <td>56.541000</td>
                <td>
                  <bold>124.427002</bold>
                </td>
                <td>
                  <bold>8:15:05</bold>
                </td>
                <td>
                  <bold>8:17:09</bold>
                </td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>27</td>
                <td>27</td>
                <td>11,732,853,219</td>
                <td>29.278999</td>
                <td>71.709000</td>
                <td>8:15:05</td>
                <td>8:16:17</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>26</td>
                <td>26</td>
                <td>11,913,686,128</td>
                <td>29.958000</td>
                <td>72.875000</td>
                <td>8:15:06</td>
                <td>8:16:19</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>25</td>
                <td>25</td>
                <td>11,941,084,517</td>
                <td>29.827999</td>
                <td>72.261002</td>
                <td>8:15:06</td>
                <td>8:16:18</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>24</td>
                <td>24</td>
                <td>11,791,495,467</td>
                <td>29.166000</td>
                <td>69.338000</td>
                <td>8:15:06</td>
                <td>8:16:15</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>22</td>
                <td>23</td>
                <td>22,340,653,336</td>
                <td>54.713001</td>
                <td>119.942000</td>
                <td>8:15:10</td>
                <td>8:17:09</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>20</td>
                <td>21</td>
                <td>19,325,817,959</td>
                <td>47.192000</td>
                <td>112.999000</td>
                <td>8:15:10</td>
                <td>8:17:03</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>17</td>
                <td>19</td>
                <td>20,544,577,090</td>
                <td>48.462000</td>
                <td>115.941002</td>
                <td>8:15:11</td>
                <td>8:17:07</td>
              </tr>
              <tr>
                <td>Z1</td>
                <td>1</td>
                <td>16</td>
                <td>12,836,804,380</td>
                <td>29.027000</td>
                <td>76.518000</td>
                <td>8:15:11</td>
                <td>8:16:27</td>
              </tr>
              <tr>
                <td>TOTAL</td>
                <td>
                </td>
                <td>
                </td>
                <td>274,768,617,130</td>
                <td>691.909999</td>
                <td>
                  <bold>124.427002</bold>
                </td>
                <td>
                  <bold>8:15:05</bold>
                </td>
                <td>
                  <bold>8:17:09</bold>
                </td>
              </tr>
            </tbody>
          </table>
        </table-wrap>
        <p>execution completed in 124.427 seconds, compared with 696.825 seconds for the sequential execution. This corresponds to 17.86% of the sequential runtime (124.427 seconds, versus 696.825 seconds) and represents an overall reduction of 82.14% in execution time. Similarly, CPU utilization reached 100% at the start of execution and subsequently stabilized at approximately 97%.</p>
        <p>Under sixteenthread parallel execution on the same hardware platform, Algorithm Z1 achieved 78.98% of the runtime of Algorithm ZS1 (124.427002 seconds versus 157.539993 seconds), corresponding to a performance improvement of 21.02%.</p>
      </sec>
    </sec>
    <sec id="sec6">
      <title>6. Summary</title>
      <p>The performance evaluation of the proposed algorithms is presented in <bold>Table 6</bold>, which reports sequential and multithreaded execution times, percentage reductions in runtime, estimated time savings, and average CPU utilization across multiple values of <italic>n</italic> and varying thread counts. Across all experiments, Algorithm Z1 consistently outperforms Algorithm ZS1 under both sequential and parallel execution settings. </p>
      <p><bold>Table 6</bold><bold>.</bold> Summary measurement results Algorithm ZS1 vs Algorithm Z1.</p>
      <table-wrap id="tbl6">
        <label>Table 6</label>
        <table>
          <tbody>
            <tr>
              <td rowspan="2">Algorithm</td>
              <td rowspan="2">
                <italic>n</italic>
              </td>
              <td rowspan="2">Parallel Runs</td>
              <td>Single-threaded</td>
              <td>Single-threaded</td>
              <td>Muti-threaded</td>
              <td>Muti-threaded</td>
              <td>Muti-threaded</td>
            </tr>
            <tr>
              <td>Single execution Time Sec/Sec per Partition</td>
              <td>Sequential Runs Time Sec/Sec per Partition</td>
              <td>Time Sec/Sec per Partition</td>
              <td>Time Saving</td>
              <td>CPU Usage</td>
            </tr>
            <tr>
              <td>
                <bold>ZS1</bold>
              </td>
              <td>
                <bold>150</bold>
              </td>
              <td>
                <bold>4</bold>
              </td>
              <td>154.584002</td>
              <td>154.434006</td>
              <td>62.945999</td>
              <td>59.28%</td>
              <td>28%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>3.783886E−09</td>
              <td>3.780215E−09</td>
              <td>1.540784E−09</td>
              <td>
              </td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
                <bold>Z1</bold>
              </td>
              <td>
                <bold>150</bold>
              </td>
              <td>
                <bold>4</bold>
              </td>
              <td>108.193001</td>
              <td>106.355001</td>
              <td>47.875999</td>
              <td>55.75%</td>
              <td>28%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>2.648334E−09</td>
              <td>2.603343E−09</td>
              <td>1.171902E−09</td>
              <td>69.03%</td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
                <bold>ZS1</bold>
              </td>
              <td>
                <bold>150</bold>
              </td>
              <td>
                <bold>17</bold>
              </td>
              <td>151.744003</td>
              <td>150.232000</td>
              <td>23.315001</td>
              <td>84.64%</td>
              <td>97%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>3.714369E−09</td>
              <td>3.677359E−09</td>
              <td>5.707015E−10</td>
              <td>
              </td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
                <bold>Z1</bold>
              </td>
              <td>
                <bold>150</bold>
              </td>
              <td>
                <bold>17</bold>
              </td>
              <td>105.403000</td>
              <td>103.927000</td>
              <td>18.730000</td>
              <td>82.23%</td>
              <td>97%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>2.580040E−09</td>
              <td>2.543911E−09</td>
              <td>4.584704E−10</td>
              <td>87.66%</td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
                <bold>ZS1</bold>
              </td>
              <td>
                <bold>170</bold>
              </td>
              <td>
                <bold>16</bold>
              </td>
              <td>1099.354004</td>
              <td>1007.247001</td>
              <td>157.539993</td>
              <td>85.67%</td>
              <td>97%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>4.001017E−09</td>
              <td>3.665801E−09</td>
              <td>5.733551E−10</td>
              <td>
              </td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
                <bold>Z1</bold>
              </td>
              <td>
                <bold>170</bold>
              </td>
              <td>
                <bold>16</bold>
              </td>
              <td>696.825012</td>
              <td>691.909999</td>
              <td>124.427002</td>
              <td>82.14%</td>
              <td>97%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>2.536043E−09</td>
              <td>2.518155E−09</td>
              <td>4.528428E−10</td>
              <td>88.68%</td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
                <bold>ZS1</bold>
              </td>
              <td>
                <bold>190</bold>
              </td>
              <td>
                <bold>16</bold>
              </td>
              <td>0.000000</td>
              <td>6250.526956</td>
              <td>0.000000</td>
              <td>0.00%</td>
              <td>97%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>0.000000E+00</td>
              <td>3.747931E−09</td>
              <td>0.000000E+00</td>
              <td>
              </td>
              <td>
              </td>
            </tr>
            <tr>
              <td>
                <bold>Z1</bold>
              </td>
              <td>
                <bold>190</bold>
              </td>
              <td>
                <bold>16</bold>
              </td>
              <td>4174.296875</td>
              <td>4127.428999</td>
              <td>763.338939</td>
              <td>81.71%</td>
              <td>97%</td>
            </tr>
            <tr>
              <td>
              </td>
              <td>
              </td>
              <td>
              </td>
              <td>2.502985E−09</td>
              <td>2.474882E−09</td>
              <td>4.577121E−10</td>
              <td>87.79%</td>
              <td>
              </td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <p>For the highest integer tested, <italic>n</italic> = 170 on an AMD Ryzen 7 5800HS system (8 cores, 16 threads, 16 GB RAM), Algorithm Z1 reduced the sequential execution time by 36.62% compared with the original sequential implementation of Algorithm ZS1 (696.825 seconds versus 1099.354 seconds). Similarly, the parallel implementation of Z1 achieved a 21.02% reduction in execution time relative to the parallel implementation of ZS1 (124.427002 seconds versus 157.539993 seconds). Furthermore, comparing the parallel execution time of Z1 with the original sequential baseline of ZS1 yields an overall reduction of 88.68% (124.427002 seconds versus 1099.354 seconds). For comparison, at <italic>n</italic> = 150, the 17-thread implementation achieved a time saving of 87.66%. These results confirm the superior efficiency and scalability of Algorithm Z1 over Algorithm ZS1.</p>
      <p>For clarification:</p>
      <p>82.14% = (100 − (124.427002/696.825012)) %;</p>
      <p>88.68% = (100 − (124.427002/1099.354004)) %</p>
    </sec>
    <sec id="sec7">
      <title>7. Conclusions</title>
      <p>Using MSYS MinGW64 on an AMD Ryzen 7 5800HS system (8 cores, 16 threads, 16 GB RAM), Algorithm Z1 consistently outperforms algorithm ZS1 under both sequential and parallel execution conditions. Although both algorithms maintain the constant average delay property, their practical performance is influenced by system architecture and compiler behavior. The performance advantage of Algorithm Z1 becomes particularly significant for values of <italic>n</italic> &gt; 100.</p>
      <p>Empirical results demonstrate that parallel execution on a single hardware system yields substantial runtime reduction. Using four threads produces an approximate 69% decrease in execution time, while sixteen threads achieve reductions of nearly 89%. Notably, subdividing the generation process improves performance even in the absence of parallel execution.</p>
      <p>In practice, executing a single subset is more efficient than launching multiple subsets concurrently, since parallel initialization introduces overhead that increases with the number of simultaneously active subsets. A key advantage of Algorithms ZS1 and Z1 is their support for selective partition generation through parameter adjustment alone, without requiring structural modifications. This distinguishes them from alternative standard-form generation methods, particularly those outside the anti-lexicographic and lexicographic frameworks, which typically rely on additional conditional checks that significantly increase computational cost.</p>
      <p>Another important observation is that generating the full partition set P(<italic>n</italic>) through multiple sequential executions of complete subsets is more efficient than performing a single-threaded monolithic run. For example, when <italic>n</italic> = 170, a full execution of Algorithm Z1 required 696.825 seconds, whereas sequential execution of sixteen subdivided runs required a total of 691.909 seconds. This consistently observed behavior suggests that subdivision reduces system load and improves performance even in the absence of parallelism.</p>
      <p>The ability to execute subsets sequentially or in parallel and subsequently combine their outputs makes it feasible to generate partitions for significantly larger values of <inline-formula><mml:math><mml:math xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mml="http://www.w3.org/1998/Math/MathML"><mml:mi> n </mml:mi></mml:math></mml:math></inline-formula> than would be practical in a single run. For instance, this approach enables full computation of partitions for <italic>n</italic> = 190 using Algorithm ZS1.</p>
      <p>For sufficiently large <italic>n</italic>, a trade-off emerges between executing subsets sequentially or in parallel on a single system and distributing them across multiple machines, each handling a distinct subset. The case <italic>n</italic> = 200 highlights these considerations and illustrates the resource constraints inherent in largescale partition generation.</p>
      <p>For large value of <italic>n</italic>, the most efficient strategy is to distribute subsets across multiple machines using multi-threaded execution, ensuring that the number of subsets assigned does not exceed the available threads per machine and that total CPU utilization on each machine remains below approximately 97%.</p>
      <p>All performance measurements reported in this study were obtained with output operations disabled.</p>
    </sec>
    <sec id="sec8">
      <title>8. Conclusions: Algorithm Z1 vs Existing Parallel Algorithms</title>
      <p>Theoretical analysis indicates that Algorithm Z1, as illustrated in <bold>Table 7</bold>, operates as a high-efficiency sequential baseline, characterized by strong per-core computational throughput and minimal control-flow overhead. These properties allow it to remain competitive with parallel partition generation methods, particularly in scenarios where synchronization, communication, and thread-management overhead contribute significantly to total execution time.</p>
      <p><bold>Ta</bold><bold>ble 7</bold><bold>.</bold> Cross-model comparative summary.</p>
      <table-wrap id="tbl7">
        <label>Table 7</label>
        <table>
          <tbody>
            <tr>
              <td>
                <bold>Criterion</bold>
              </td>
              <td>
                <bold>Algorithm</bold>
                <bold>Z1</bold>
              </td>
              <td>
                <bold>Distributed</bold>
                <bold>Parallel</bold>
              </td>
              <td>
                <bold>Multi-Threaded</bold>
                <bold>Parallel</bold>
              </td>
            </tr>
            <tr>
              <td>Per-Core Efficiency</td>
              <td>Very High</td>
              <td>Low-Moderate</td>
              <td>Moderate</td>
            </tr>
            <tr>
              <td>Absolute Throughput</td>
              <td>Low-Moderate</td>
              <td>Very High</td>
              <td>High</td>
            </tr>
            <tr>
              <td>Scalability</td>
              <td>Low</td>
              <td>Very High</td>
              <td>Moderate</td>
            </tr>
            <tr>
              <td>Execution Overhead</td>
              <td>Minimal</td>
              <td>High</td>
              <td>Moderate</td>
            </tr>
            <tr>
              <td>Implementation Complexity</td>
              <td>Low</td>
              <td>High</td>
              <td>Moderate</td>
            </tr>
          </tbody>
        </table>
      </table-wrap>
      <sec id="sec8dot1">
        <title>Framework Conclusion</title>
        <p>Algorithm Z1 serves as a highly efficient sequential baseline, characterized by strong runtime performance and minimal execution overhead. Although some parallel algorithms may offer higher throughput or improved scalability, these gains are often accompanied by additional coordination, communication, and synchronization costs. Consequently, the practical advantages of parallelism depend heavily on the structure and characteristics of the workload. In this context, Algorithm Z1 remains a competitive approach, particularly in environments where overhead limitations reduce the effectiveness of parallel execution.</p>
      </sec>
    </sec>
    <sec id="sec9">
      <title>9. Open Discussion and Challenges</title>
      <p>Develop an algorithm for generating all integer partitions of large <italic>n</italic> on a single hardware system. For <italic>n</italic> = 510, P(510) = 3,991,268,667,606,861,086,720 which necessitates an efficient enumeration strategy. The proposed method employs a structured subdivision scheme that decomposes the solution space into subsets organized vertically and horizontally according to the Algorithm Z1 framework. Each complete partition is formed by concatenating component partitions drawn from these subsets. The independence of the subsets enables parallel execution and also supports distribution across multiple hardware systems, thereby improving scalability and computational efficiency. </p>
      <p>For <italic>n</italic> = 170, executing 16 subsets on a 16-thread processor reduced computation time by approximately 89% with average CPU utilization below 98%. Similar experiments on 32- and 64-thread systems, using 32 and 64 subsets respectively, are expected to achieve comparable or greater speedup while maintaining CPU utilization under 98%.</p>
      <p>A comparative evaluation framework should also be developed to assess Algorithm Z1 against existing parallel algorithms. The evaluation should consider performance, scalability, runtime efficiency, and execution overhead under two deployment models:</p>
      <p>Distributed or multi-system parallelismSingle-system, multi-threaded parallelism.</p>
    </sec>
    <sec id="sec10">
      <title>10. Standard Form Partitions</title>
      <p>For <italic><bold>n</bold></italic><bold>=</bold><bold>10</bold>, the Standard form of the Partitions is:</p>
      <fig id="fig3">
        <label>Figure 3</label>
        <graphic xlink:href="https://html.scirp.org/file/1101215-rId15.jpeg?20260623115939" />
      </fig>
    </sec>
    <sec id="sec11">
      <title>11. C Code: ZS1, Z1 and Z3</title>
      <p><bold>ZS1</bold><bold>-</bold><bold>C</bold><bold>code</bold></p>
      <p>#include </p>
      <p>#include </p>
      <p>#include </p>
      <p>int m,n,i,h,t,r,x1,x2,y1,y2,z1,z2,z3;</p>
      <p>long long int v,w;</p>
      <p>clock_t clock1, clock2;</p>
      <p>time_t tstart, tfinish;</p>
      <p>float cpu_time_used;</p>
      <p>int main(void) {</p>
      <p> printf("\n Algorithm ZS1 - Restricted \n \n \n ");</p>
      <p> printf("\n please enter the value of integer N : ");</p>
      <p> scanf ("%d", &amp;n);</p>
      <p> printf("\n please enter the lowest value of the leftmost part: ");</p>
      <p> scanf ("%d", &amp;x1);</p>
      <p> printf("\n please enter the highest value of the leftmost part: ");</p>
      <p> scanf ("%d", &amp;x2);</p>
      <p> if (x1 == 1) {x1 = 2;}</p>
      <p> printf("\n \n \n Generating Standard Antilexicographic Partitions for integer %d \n \n", n);</p>
      <p> int a[n+1];</p>
      <p> for (i=0; i&lt;=n; ++i) a[i]=1;</p>
      <p> a[1] = x2 + 1; h = 1; m = n - x2;</p>
      <p> time(&amp;tstart);</p>
      <p> printf("\n Start: %s", ctime(&amp;tstart));</p>
      <p> clock1 = clock();</p>
      <p> while (a[1] &gt;= x1){</p>
      <p> if (a[h] == 2) { m += 1; a[h] = 1; --h; }</p>
      <p> else {</p>
      <p> t = m-h+1; a[h] -=1; r = a[h];</p>
      <p> while (t &gt;= r) { h +=1; a[h] = r; t -=r;}</p>
      <p> if (t &lt; 2) {m = h + t;}</p>
      <p> else {m = h + 1; ++h; a[h] = t;}</p>
      <p> } </p>
      <p> if (a[1] &gt;= x1) {for(i = 1; i &lt;= m; ++i) (printf(" %d", a[i])); printf(" \n");}</p>
      <p> } // while (a[1] &gt;= x1)</p>
      <p> if (a[1] == 1) {for(i = 1; i &lt;= n; ++i) (printf(" %d", a[i])); printf(" \n");}</p>
      <p> clock2 = clock();</p>
      <p> cpu_time_used = ( (float) (clock2-clock1))/CLOCKS_PER_SEC;</p>
      <p> printf("\n cpu_time_used : %lf seconds \n", cpu_time_used);</p>
      <p> printf(" ( CLOCKS_PER_SEC:%d) \n",CLOCKS_PER_SEC);</p>
      <p> printf("\n Start : %s", ctime(&amp;tstart));</p>
      <p> time(&amp;tfinish);</p>
      <p> printf("\n Finish : %s", ctime(&amp;tfinish));</p>
      <p> scanf ("%d", &amp;i);</p>
      <p> return 0;</p>
      <p>}</p>
      <p><bold>Z1</bold><bold>–</bold><bold>C</bold><bold>code</bold></p>
      <p>#include </p>
      <p>#include </p>
      <p>#include </p>
      <p>#include </p>
      <p>int m,n,i,h,t,r,x,x1,x2;</p>
      <p>long long int v,v0,v1,v2,v3,v23,v4,w,y,t0,t1,t2;</p>
      <p>clock_t clock1, clock2;</p>
      <p>time_t tstart, tfinish;</p>
      <p>float cpu_time_used;</p>
      <p>float vp=0.00;</p>
      <p>int main(void) {</p>
      <p> printf("\n Algorithm Z1 - Restricted \n \n \n ");</p>
      <p> printf("\n please enter the value of integer N : ");</p>
      <p> scanf ("%d", &amp;n);</p>
      <p> printf("\n please enter leftmost part from: ");</p>
      <p> scanf ("%d", &amp;x1);</p>
      <p> printf("\n please enter leftmost part to : ");</p>
      <p> scanf ("%d", &amp;x2);</p>
      <p> if (x1 == 1) {x1 = 2;}</p>
      <p> printf("\n \n \n Generating Standard Antilexicographic Partitions for integer %d \n \n", n);</p>
      <p> int a[n+1];</p>
      <p> for (i=0; i&lt;=n; ++i) a[i]=1;</p>
      <p> a[1] = x2 + 1; h = 1; m = n - x2; w=0;</p>
      <p> time(&amp;tstart);</p>
      <p> printf("\n Start : %s", ctime(&amp;tstart));</p>
      <p> clock1 = clock();</p>
      <p> while (a[1] &gt;= x1){</p>
      <p> while (a[h] == 2){</p>
      <p> ++m; a[h] = 1; --h; </p>
      <p> for (i = 1; i &lt;= m; ++i) (printf("%d ", a[i])); </p>
      <p> printf(" \n"); ++w;}</p>
      <p> if (a[h] == 3) { </p>
      <p> x = m - h; a[h] = 2;</p>
      <p> if (x &gt; 3) { </p>
      <p> while (x &gt; 0){++h; a[h] = 2; x -=2;} </p>
      <p> if (x == 0){m = h + 1;}</p>
      <p> else {m = h;}</p>
      <p> } // x&gt;3</p>
      <p> else if (x == 0) { //m = h</p>
      <p> ++m; </p>
      <p> for (i = 1; i &lt;= m; ++i) (printf("%d ", a[i])); printf("\n");</p>
      <p> a[h] = 1; --h; ++m; ++w;}</p>
      <p> else if (x == 1) {</p>
      <p> for (i = 1; i &lt;= h; ++i) (printf("%d ", a[i]));</p>
      <p> printf(" 2"); printf(" \n");</p>
      <p> for (i = 1; i &lt;= h; ++i) (printf("%d ", a[i]));</p>
      <p> printf(" 1 1"); printf("\n");</p>
      <p> a[h] = 1; --h, m += 2; w += 2;}</p>
      <p> else if (x == 2) {</p>
      <p> for (i = 1; i &lt;= h; ++i) (printf("%d ", a[i]));</p>
      <p> printf(" 2 1"); printf(" \n");</p>
      <p> for (i = 1; i &lt;= h; ++i) (printf("%d ", a[i]));</p>
      <p> printf(" 1 1 1"); printf(" \n");</p>
      <p> a[h] = 1; --h; m += 2; w += 2;}</p>
      <p>else { // x=3</p>
      <p> for (i = 1; i &lt;= h; ++i) (printf("%d ", a[i]));</p>
      <p> printf(" 2 2"); printf("\n"); </p>
      <p> for (i = 1; i &lt;= h; ++i) (printf("%d ", a[i]));</p>
      <p> printf(" 2 1 1"); printf(" \n");</p>
      <p> for (i = 1; i &lt;= h; ++i) (printf("%d ", a[i]));</p>
      <p> printf(" 1 1 1 1"); printf("\n");</p>
      <p> a[h] = 1; --h; m += 2; w += 3;}</p>
      <p> ++w;</p>
      <p> for (i = 1; i &lt;= m; ++i) (printf("%d ", a[i])); printf("\n");</p>
      <p> } // a[h] == 3) </p>
      <p> else if (a[h] &gt; 3) {</p>
      <p> t = m-h+1; a[h] -=1; r = a[h]; </p>
      <p> while (t &gt;= r){++h; a[h] = r; t -=r;}</p>
      <p> if (t &lt; 2) {m = h + t;}</p>
      <p> else {m = h + 1; ++h; a[h] = t;} </p>
      <p> for (i = 1; i &lt;= m; ++i) (printf("%d ", a[i])); printf("\n");</p>
      <p> ++w;</p>
      <p> } // (a[h] &gt; 3) </p>
      <p> } // while a[1] &gt;= x1</p>
      <p> if (a[1] &lt; x1) {</p>
      <p> if (a[1] &gt; 1) { --w;}}</p>
      <p> clock2 = clock(); </p>
      <p> cpu_time_used = ( (float) (clock2-clock1))/CLOCKS_PER_SEC;</p>
      <p> printf("\n cpu_time_used : %lf seconds \n", cpu_time_used);</p>
      <p> printf(" (CLOCKS_PER_SEC:%d) \n",CLOCKS_PER_SEC);</p>
      <p> printf("\n Start : %s", ctime(&amp;tstart));</p>
      <p> time(&amp;tfinish);</p>
      <p> printf("\n Finish : %s", ctime(&amp;tfinish)); </p>
      <p> printf("\n partitions_W: %lld\n", w);</p>
      <p> scanf ("%d", &amp;i);</p>
      <p> return 0;</p>
      <p>} </p>
      <p><bold>Z3</bold><bold>–</bold><bold>C</bold><bold>code</bold></p>
      <p>#include </p>
      <p>#include </p>
      <p>#include </p>
      <p>#include </p>
      <p>int c,c1,m,n,i,h,k,t,r,x,x1,x2,x3,y1,y2;</p>
      <p>long long int w,w1,w2,w3,w4,v;</p>
      <p>float x4,u1,u2,u3,u4;</p>
      <p>clock_t clock1, clock2;</p>
      <p>time_t tstart, tfinish;</p>
      <p>float cpu_time_used;</p>
      <p>int main(void) {</p>
      <p> printf("\n Algorithm Z3 - Multi-Thread setting \n");</p>
      <p> printf("\n Please enter the value of integer N : ");</p>
      <p> scanf ("%d", &amp;n);</p>
      <p> printf("\n Please enter the lowest leftmost part : ");</p>
      <p> scanf ("%d", &amp;x1);</p>
      <p> printf("\n Please enter the highest leftmost part : ");</p>
      <p> scanf ("%d", &amp;x2);</p>
      <p> printf("\n Please enter the number of Multi-Threads: ");</p>
      <p> scanf ("%d", &amp;x3);</p>
      <p> printf("\n Please enter the Partitions factor : ");</p>
      <p> scanf ("%f", &amp;x4);</p>
      <p> printf("------------------ Finding Threads with Partitions Borders ------------------\n");</p>
      <p> if (x1 == 1) {x1 = 2;}</p>
      <p> int a[n+1]; </p>
      <p> for (i=0; i&lt;=n; ++i) a[i]=1;</p>
      <p> a[1] = x2 + 1; h = 1; m = n - x2;</p>
      <p> time(&amp;tstart); </p>
      <p> clock1 = clock();</p>
      <p> long long int p[n+1];</p>
      <p> for (i=0; i&lt;=n; ++i) p[i]=0;</p>
      <p> // calculating P(n)</p>
      <p> p[0] = 1;</p>
      <p> for (k=1; k&lt;=n; ++k) {</p>
      <p> for (i=k; i&lt;=n; ++i) {p[i] += p[i-k];}}</p>
      <p> clock2 = clock();</p>
      <p> w = p[n]; </p>
      <p> printf("\n P(n): %lld ", w);</p>
      <p> cpu_time_used = ( (float) (clock2-clock1))/CLOCKS_PER_SEC;</p>
      <p> printf(" cpu_time: %lf s", cpu_time_used);</p>
      <p> printf(" (CLOCKS_PER_SEC:%d) \n\n",CLOCKS_PER_SEC);</p>
      <p> // finding partitions borders of threads</p>
      <p> for (i=0; i&lt;=n; ++i) a[i]=1;</p>
      <p> a[1] = x2 + 1; h = 1; m = n - x2; w1 = 0; c = 0;</p>
      <p> v = w / x3; v = v * x4;</p>
      <p> printf("Maximum Partitions per one Thread %lld \n\n", v);</p>
      <p> c1 = a[1];</p>
      <p> while (a[1] &gt;= x1){</p>
      <p> if (v &gt; w1) {</p>
      <p> if (a[1] &lt; c1) {w2 = 0, c1 = a[1];}</p>
      <p> while (a[h] == 2) {++m; a[h] = 1; --h; ++w1; ++w2;}</p>
      <p> if (a[h] == 3) { </p>
      <p> x = m - h; a[h] = 2;</p>
      <p> if (x &gt; 3) { </p>
      <p> while (x &gt; 0) {++h; a[h] = 2; x -=2;} </p>
      <p> if (x == 0){m = h + 1;}</p>
      <p> else {m = h;}}</p>
      <p> else if (x == 0) {++m; a[h] = 1; --h; ++m; ++w1; ++ w2;} //m = h</p>
      <p> else if (x == 1) {a[h] = 1; --h, m += 2; w1 += 2; w2 += 2;}</p>
      <p> else if (x == 2) {a[h] = 1; --h; m += 2; w1 += 2; w2 += 2;}</p>
      <p> else {a[h] = 1; --h; m += 2; w1 += 3; w2 += 3;} // x = 3</p>
      <p> ++w1; ++w2; </p>
      <p> } // a[h] == 3) </p>
      <p> else if (a[h] &gt; 3) {</p>
      <p> t = m-h+1; a[h] -=1; r = a[h]; </p>
      <p> while (t &gt;= r){++h; a[h] = r; t -=r;}</p>
      <p> if (t &lt; 2) {m = h + t;}</p>
      <p> else {m = h + 1; ++h; a[h] = t;} </p>
      <p> ++w1; ++w2;</p>
      <p> } // (a[h] &gt; 3) </p>
      <p> } // ( v &gt; w1)</p>
      <p> else { </p>
      <p> clock2 = clock();</p>
      <p> cpu_time_used = ( (float) (clock2-clock1))/CLOCKS_PER_SEC; </p>
      <p> ++c; y1 = a[1] + 1; y2 = x2;</p>
      <p> if (n &gt; x2) {y2 = x2 - 1;}</p>
      <p> if (y1 &gt; y2) {y1 = y2;}</p>
      <p> printf("Thread - %d - ", c); printf("Lower %d - ", y1); printf("Higer %d - ", y2);</p>
      <p> w3 = w1 - w2 - 1; w4 = w4 + w3;</p>
      <p> printf("Partitions: %lld ", w3); printf("cpu_time : %lf s \n\n", cpu_time_used);</p>
      <p> for (i=0; i&lt;=n; ++i) a[i]=1;</p>
      <p> x2 = y1; y1 = 0; y2 = 0; w1=0; w2=0; a[1] = x2; h = 1; m = n - x2 + 1;</p>
      <p> }</p>
      <p> } // while (a[1] &gt; x1)</p>
      <p> clock2 = clock();</p>
      <p> cpu_time_used = ( (float) (clock2-clock1))/CLOCKS_PER_SEC;</p>
      <p> ++y1; --x2; ++c;</p>
      <p> printf("Thread - %d - ", c); printf("Lower %d - ", y1); printf("Higer %d - ", x2);</p>
      <p> if (c == 1) { --w1; }</p>
      <p> printf(" Partitions: %lld ", w1); printf(" cpu_time : %lf s \n\n", cpu_time_used);</p>
      <p> w4 = w4 + w1;</p>
      <p> printf(" Total Partitions: %lld ", w4); printf("\n Start : %s", ctime(&amp;tstart));</p>
      <p> time(&amp;tfinish);</p>
      <p> printf("\n Finish : %s", ctime(&amp;tfinish));</p>
      <p> scanf ("%d", &amp;i);</p>
      <p> return 0;</p>
      <p>}</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <title>References</title>
      <ref id="B1">
        <label>1.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Zoghbi, A.C. (1993) Algorithms for Generating Integer Partitions. University of Ottawa. https://ruor.uottawa.ca/handle/10393/6506</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Zoghbi, A.C.</string-name>
            </person-group>
            <year>1993</year>
            <article-title>Algorithms for Generating Integer Partitions</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B2">
        <label>2.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">Stojmenović, I. and Zoghbi, A. (1998) Fast Algorithms for Genegrating Integer Partitions. <italic>International</italic><italic>Journal</italic><italic>of</italic><italic>Computer</italic><italic>Mathematics</italic>, 70, 319-332. https://doi.org/10.1080/00207169808804755 <pub-id pub-id-type="doi">10.1080/00207169808804755</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1080/00207169808804755">https://doi.org/10.1080/00207169808804755</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Zoghbi, A.</string-name>
            </person-group>
            <year>1998</year>
            <article-title>Fast Algorithms for Genegrating Integer Partitions</article-title>
            <source>International Journal of Computer Mathematics</source>
            <volume>70</volume>
            <pub-id pub-id-type="doi">10.1080/00207169808804755</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B3">
        <label>3.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Knuth, D.E. (2005) The Art of Computer Programming (TAOCP) Volume 4. Addison Wesley.</mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Knuth, D.E.</string-name>
            </person-group>
            <year>2005</year>
            <article-title>The Art of Computer Programming (TAOCP) Volume 4</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B4">
        <label>4.</label>
        <citation-alternatives>
          <mixed-citation publication-type="journal">Opdyke, J.D. (2010) A Unified Approach to Algorithms Generating Unrestricted and Restricted Integer Compositions and Integer Partitions. <italic>Journal</italic><italic>of</italic><italic>Mathematical</italic><italic>Modelling</italic><italic>and</italic><italic>Algorithms</italic>, 9, 53-97. https://doi.org/10.1007/s10852-009-9116-2 <pub-id pub-id-type="doi">10.1007/s10852-009-9116-2</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.1007/s10852-009-9116-2">https://doi.org/10.1007/s10852-009-9116-2</ext-link></mixed-citation>
          <element-citation publication-type="journal">
            <person-group person-group-type="author">
              <string-name>Opdyke, J.D.</string-name>
            </person-group>
            <year>2010</year>
            <article-title>A Unified Approach to Algorithms Generating Unrestricted and Restricted Integer Compositions and Integer Partitions</article-title>
            <source>Journal of Mathematical Modelling and Algorithms</source>
            <volume>9</volume>
            <pub-id pub-id-type="doi">10.1007/s10852-009-9116-2</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B5">
        <label>5.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Landgren, D. (2007) MetaCpan.org. https://metacpan.org/pod/Integer::Partition</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Landgren, D.</string-name>
            </person-group>
            <year>2007</year>
            <article-title>MetaCpan</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B6">
        <label>6.</label>
        <citation-alternatives>
          <mixed-citation publication-type="thesis">Carabott, A. (2009) Final Year Project Dissertation. University of Sussex. https://www.arthurcarabott.com/assets/projects/konnakkol/dissertation.pdf</mixed-citation>
          <element-citation publication-type="thesis">
            <person-group person-group-type="author">
              <string-name>Carabott, A.</string-name>
            </person-group>
            <year>2009</year>
            <article-title>Final Year Project Dissertation</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B7">
        <label>7.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Nayak, A. and Stojmenovic, I. (2008) Handbook of Applied Algorithms.</mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Nayak, A.</string-name>
              <string-name>Stojmenovic, I.</string-name>
            </person-group>
            <year>2008</year>
            <article-title>Handbook of Applied Algorithms</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B8">
        <label>8.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Schults, A. (2012) Multiagent Coordination Enabling Autonomous Logistics. https://www.researchgate.net/publication/220634466_Multiagent_Coordination_Enabling_Autonomous_Logistics</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Schults, A.</string-name>
            </person-group>
            <year>2012</year>
            <article-title>Multiagent Coordination Enabling Autonomous Logistics</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B9">
        <label>9.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Kelleher, J. (2005) Encoding Partitions as Ascending Compositions. Department of Computer Science, University College Cork. https://jeromekelleher.net/downloads/k06.pdf</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Kelleher, J.</string-name>
              <string-name>Science, U</string-name>
            </person-group>
            <year>2005</year>
            <article-title>Encoding Partitions as Ascending Compositions</article-title>
            <source>Department of Computer Science</source>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B10">
        <label>10.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Beaujean, F. (2017) Create Integer Partitions in Multiplicity Representation. https://gist.github.com/fredRos/1be056502742dba0753828e7852f9986</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Beaujean, F.</string-name>
            </person-group>
            <year>2017</year>
            <article-title>Create Integer Partitions in Multiplicity Representation</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B11">
        <label>11.</label>
        <mixed-citation publication-type="web">Julie Documentation. Combinatorics. https://ulthiel.github.io/JuLie.jl/stable/combinatorics/</mixed-citation>
      </ref>
      <ref id="B12">
        <label>12.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Stein, W. and Bober, J. (2007) Iterators over the Partitions of an Integer. http://sporadic.stanford.edu/reference/combinat/sage/combinat/partitions.html</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Stein, W.</string-name>
              <string-name>Bober, J.</string-name>
            </person-group>
            <year>2007</year>
            <article-title>Iterators over the Partitions of an Integer</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B13">
        <label>13.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">University of Waterloo (2017) Introduction. https://cs.uwaterloo.ca/journals/JIS/VOL20/Mertens/mert4.tex</mixed-citation>
          <element-citation publication-type="web">
            <year>2017</year>
            <article-title>Introduction</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B14">
        <label>14.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Kowalenko, V. (2021) Developments from Programming the Partitions Method for a Power Series Expansion. https://arxiv.org/pdf/1203.4967</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Kowalenko, V.</string-name>
            </person-group>
            <year>2021</year>
            <article-title>Developments from Programming the Partitions Method for a Power Series Expansion</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B15">
        <label>15.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Jann, B. (2008) Multinomial Goodness-of-Fit: Large-Sample Tests with Survey. AgEcon Search. https://ageconsearch.umn.edu/record/122584/files/sjart_st0142.pdf</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Jann, B.</string-name>
            </person-group>
            <year>2008</year>
            <article-title>Multinomial Goodness-of-Fit: Large-Sample Tests with Survey</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B16">
        <label>16.</label>
        <citation-alternatives>
          <mixed-citation publication-type="other">Wolff, R. (2017) The Integer Nucleolus of Directed Simple Games: A Characterization and an Algorithm. <italic>Games</italic>, 8, Article 16. https://doi.org/10.3390/g8010016 <pub-id pub-id-type="doi">10.3390/g8010016</pub-id><ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3390/g8010016">https://doi.org/10.3390/g8010016</ext-link></mixed-citation>
          <element-citation publication-type="other">
            <person-group person-group-type="author">
              <string-name>Wolff, R.</string-name>
            </person-group>
            <year>2017</year>
            <article-title>The Integer Nucleolus of Directed Simple Games: A Characterization and an Algorithm</article-title>
            <source>Games</source>
            <volume>8</volume>
            <elocation-id>16</elocation-id>
            <pub-id pub-id-type="doi">10.3390/g8010016</pub-id>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B17">
        <label>17.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Blischak, P.D., Latvis, M., Morales-Briones, D.F., <italic>et al</italic>. (2018) Fluidigm2PURC: Automated Processing and Haplotype Inference for Double-Barcoded PCR Amplicons. http://biorxiv.org/cgi/reprint/242677v1</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Blischak, P.D.</string-name>
              <string-name>Latvis, M.</string-name>
              <string-name>Morales-Briones, D.F.</string-name>
            </person-group>
            <year>2018</year>
            <article-title>Fluidigm2PURC: Automated Processing and Haplotype Inference for Double-Barcoded PCR Amplicons</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B18">
        <label>18.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Jiang, Y. (2020) Efficient Algorithms for Calculating Epistatic Genomic. https://pmc.ncbi.nlm.nih.gov/articles/PMC7648578/</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Jiang, Y.</string-name>
            </person-group>
            <year>2020</year>
            <article-title>Efficient Algorithms for Calculating Epistatic Genomic</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
      <ref id="B19">
        <label>19.</label>
        <citation-alternatives>
          <mixed-citation publication-type="web">Zhang, X.X. (2023) Future Urban Energy System for Buildings: The Pathway towards Flexibility. https://dokumen.pub/future-urban-energy-system-for-buildings-the-pathway-towards-flexibility-resilience-and-optimization-9819912210-9789819912216.html</mixed-citation>
          <element-citation publication-type="web">
            <person-group person-group-type="author">
              <string-name>Zhang, X.X.</string-name>
            </person-group>
            <year>2023</year>
            <article-title>Future Urban Energy System for Buildings: The Pathway towards Flexibility</article-title>
          </element-citation>
        </citation-alternatives>
      </ref>
    </ref-list>
  </back>
</article>