这应该适用于 2 分母的任何幂:
// dodge this special case:
[fractionArray addObject:@"0"];
for ( int numerator = 1; numerator <= 15; numerator++ )
{
    int denominator = 16;
    int num = numerator;
    while ( num % 2 == 0 )
    {
        num /= 2;
        denominator /= 2;
    }
    NSString *fracString = [NSString stringWithFormat:@"%d/%d", num, denominator];
    [fractionArray addObject:fracString]; // Add the string.
}
并且很容易将其扩展到任何分母。(提示:用 n 替换 2,从 2 到 sqrt(分母)迭代 n。)
编辑:现在真的有效!
由于我继续对其进行编码,因此这是考虑任何分母的版本:
int denominator = 240;
for ( int numerator = 1; numerator < denominator; numerator++ )
{
    int denom = denominator;
    int num = numerator;
    int factor = 2;
    while ( factor * factor < denom )
    {
        while ( (num % factor) == 0 && (denom % factor) == 0 )
        {
            num /= factor;
            denom /= factor;
        }
        // don't worry about finding the next prime,
        // the loop above will skip composites
        ++factor; 
    }
    NSString *fracString = [NSString stringWithFormat:@"%d/%d", num, denom];
    [fractionArray addObject:fracString];
}