これは、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.
}
そして、これを任意の分母に拡張するのは簡単です。(ヒント:2をnに置き換え、nを2からsqrt(分母)まで繰り返します。)
編集:実際に今動作します!
私が先に進んでそれをコーディングしたので、これが分母を因数分解するバージョンです:
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];
}