2013-07-05 4 views
0

Я создаю этот объект класса C для простых чисел Genrate от n до предела. У меня проблема, я не смог получить элемент в NSMutableArray внутри цикла. может кто-нибудь покажет мне, как я могу это исправить?Создание простых чисел Список в объективе C?

@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 
+2

Что значит, вы не смогли получить товар в цикле for? – CodaFi

ответ

1

Этот вопрос немного расплывчатый, но мне кажется, что вы пытаетесь сделать, это преобразовать NSDecimalNumber обратно в int. То, что ваш код действительно делает, - это получить индекс числа внутри массива (т. Е. Первый объект равен 0, второй - 1 и т. Д.). Если вы пытаетесь получить исходное значение i, измените эти строки:

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

к этому:

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

Я также рекомендую использовать другое имя, чем index, поскольку это вводит в заблуждение относительно того, что вы на самом деле делаете.

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; 
} 

Надеюсь, что это помогает!

Смежные вопросы