0

我创建了这个目标 C 类来生成从 n 到限制的素数。我有问题我无法在 for 循环中获取 NSMutableArray 中的项目。有人可以告诉我如何解决吗?

@implementation Prime

-(NSMutableArray *)generatePrimes:(int)upperLimit{
    NSMutableArray *primes  = [[NSMutableArray alloc]init];
    bool isPrime;
    int j;

    [primes addObject:[NSDecimalNumber numberWithInt:2]];

    for (int i= 3; i <= upperLimit ; i+=2) {
        j = 0;
        isPrime  = YES;

        NSInteger index;
        for(id obj in primes)
        {
            index = [primes indexOfObject:obj];
            if((index * index) <= i )
            {
                if(i % index == 0)
                {
                    isPrime = NO;
                    break;
                }
            }
        }
        if(isPrime)
        {
           [primes addObject:[NSDecimalNumber numberWithInt:i]];
        }
    }
    return primes;
}
@end
4

2 回答 2

1

这个问题有点含糊,但在我看来,您要做的是将NSDecimalNumber背面转换为 int。您的代码实际上是在数组中获取数字的索引(即第一个对象是 0,第二个对象是 1,等等)如果您试图获取 i 的原始值,请更改以下几行:

for(id obj in primes)
    {
        index = [primes indexOfObject:obj];

对此:

for(NSDecimalNumber num in primes)
    {
        index = [num integerValue];

我还建议使用与 不同的名称index,因为这会误导您实际在做什么。

于 2013-07-05T05:13:23.270 回答
0
-(NSMutableArray *)generatePrimes:(int)upperLimit
{
    NSMutableArray *primes  = [[NSMutableArray alloc]init];
    bool isPrime;

    for (int i=2; i<upperLimit; i++)
    {
        bool prime = true;
        for (int j=2; j*j<=i; j++)
        {
            if (i % j == 0)
            {
                prime = false;
                break;
            }
        }
        if(prime)
        {
            [primes addObject:[NSDecimalNumber numberWithInt:i]];
        }
    }
    return primes;
}

或者

-(NSMutableArray *)generatePrimes:(int)upperLimit
{
    NSMutableArray *primes  = [[NSMutableArray alloc]init];
    [primes addObject:[NSDecimalNumber numberWithInt:2]];
    for(int i=3; i < upperLimit; i++)
    {
        bool prime=true;
        for(int j=0;j<primes.count && (((NSDecimalNumber *)primes[j]).integerValue*((NSDecimalNumber *)primes[j]).integerValue) <= i;j++)
        {
            if(i % (((NSDecimalNumber *)primes[j]).integerValue) == 0)
            {
                prime=false;
                break;
            }
        }
        if(prime)
        {
            [primes addObject:[NSDecimalNumber numberWithInt:i]];
        }
    }

    return primes;
}

希望这可以帮助!

于 2013-07-05T05:12:32.957 回答