【问题标题】:Prime Generator not working主发电机不工作
【发布时间】:2012-07-23 19:04:18
【问题描述】:

我想编写一个非常简单的 Prime 应用程序。但我对下面的代码有一些问题,它应该生成从 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];
    }
}

【问题讨论】:

  • 你认为第四行在做什么?
  • 它应该显示素数。
  • 这是设置文本,而不是附加到它。
  • 用你的方法,1是质数
  • 附加的格式字符串是什么样的? (很抱歉没有给出答案,但你真的应该能够只用一点点思考就可以做到这一点。)

标签: objective-c primes


【解决方案1】:

有很多问题,我会试着解释一下

  • 素数检查的问题在于您在 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];
    }
}

希望这会有所帮助。

【讨论】:

  • 并非所有偶数都是素数。
  • 你的意思是不是所有的偶数都不是素数?哈哈,是的,我刚看到。
  • 确实如此。哎呀 :) 但是无论如何,您仍然从 3 开始。而且我认为您的附加代码不太正确...
  • @walkytalky 谢谢,我抓住了它并编辑了其他一些让我注意到的东西。
  • 我仍然遇到一个错误。 "没有已知的选择器'stringByAppendingString:'的类方法"
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2018-09-27
    • 2014-07-25
    • 2018-01-21
    • 2014-07-04
    • 2013-04-10
    相关资源
    最近更新 更多