Prime Generator无法正常工作

时间:2012-07-23 19:04:19

标签: objective-c primes

我想写一个非常简单的主要应用程序。但是我在下面的代码中遇到了一些问题,它应该从0到99生成素数。但它只是显示99.

一个问题是只显示最后一个数字。但另一个是主要的“检查”不起作用。我该如何解决这些问题。

for (i=0; i<100; i++) {
    for (n=2; n<i; n++) {
        if (i%n == 0) break;
        else primetext.text = [NSString stringWithFormat:@"%i, ", i];
    }
}

2 个答案:

答案 0 :(得分:2)

您应该将数字附加到primetext.text而不是分配。现在它正在每次迭代时被重新分配。

答案 1 :(得分:2)

有很多问题,我会尝试解释它们

  • 主要检查的问题是你在for循环中有if-else语句,它遍历要检查的数字。因此,如果您的号码不能被您检查的任何数字整除,那么它将被注册为素数。它也会被注册n次,其中n是被发现不可分割的次数。
  • 所有偶数都不是素数(除了2),所以你可以i+=2加倍你的速度
  • 您只需要检查一个数字的平方根,看看它是否是素数。
  • 1不是素数,因此您不需要包含它(特别是因为它可以使您的逻辑变得更复杂)。
  • 您正在重新分配字符串,而不是向其添加组件
  • 您使用的是%i而不是%d。这有时会导致奇怪的错误。

以下是您修改这些要点的方法。

int maxNum = 100;
primetext.text = @"2 ";             //Start knowing that 2 is the lowest prime (avoid evaluating evens)
for (i=3; i<=maxNum; i+=2)          //Start at 3 and add 2 (avoid 1 and 2 as well as even numbers) 
{
    bool isPrime = YES;             //Assume that i is prime
    for (n=2; n<sqrt(i); n++)       //Divide by every number up to square root
    {
        if (i%n == 0)               //If evenly divisible by n, not a prime
        {
            isPrime = NO;
            break;                  //Don't need to check any more factors, so break
        }
    }
    if (isPrime)                    //If isPrime was never set to NO, i is prime
    {
        NSString *temp = [NSString stringWithFormat:@"%d ", i];
        primetext.text = [primetext.text stringByAppendingString:temp];
    }
}

希望这有帮助。