<p>Given an integer <code>n</code>, return <em>a list of all <strong>simplified</strong> fractions between </em><code>0</code><em> and </em><code>1</code><em> (exclusive) such that the denominator is less-than-or-equal-to </em><code>n</code>. You can return the answer in <strong>any order</strong>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> n = 2
<strong>Output:</strong> [&quot;1/2&quot;]
<strong>Explanation:</strong> &quot;1/2&quot; is the only unique fraction with a denominator less-than-or-equal-to 2.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> n = 3
<strong>Output:</strong> [&quot;1/2&quot;,&quot;1/3&quot;,&quot;2/3&quot;]
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> n = 4
<strong>Output:</strong> [&quot;1/2&quot;,&quot;1/3&quot;,&quot;1/4&quot;,&quot;2/3&quot;,&quot;3/4&quot;]
<strong>Explanation:</strong> &quot;2/4&quot; is not a simplified fraction because it can be simplified to &quot;1/2&quot;.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 100</code></li>
</ul>

class Solution {
public:
    vector<string> simplifiedFractions(int n) {
        vector<string> ret;
        // unordered_set<double> real_nums;
        // int up = 1;
        // int down = 1;
        // while (up <= n && down <= n) {
        //     double num = (double)up/down;
        //     //std::cout << "num is" << num << "\n";
        //     if (num < 1) {
        //         if (real_nums.find(num) == real_nums.end()) {
        //             real_nums.insert(num);
        //             ostringstream oss;
        //             oss << up << "/" << down;
        //             //std::cout << "pushed in " << oss.str() << "\n";
        //             ret.push_back(oss.str());
        //         }
        //     }
        //     down++;
        //     if (down > n) {
        //         down = 1;
        //         up++;
        //     }
        // }
        if (n == 1) {
            return ret;
        }
        for (int i = 2; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (std::gcd(i,j) == 1 && j < i) {
                    ostringstream oss;
                    oss << j << "/" << i;
                    ret.push_back(oss.str());
                }
            }
        }
        return ret;
    }
};
24700