找到第n个素数|变量' prime'在初始化之前使用

时间:2017-01-18 00:59:19

标签: swift swift3

我试图编写一个返回第n个素数的Swift 3.0方法。存在other sources for this problem但这些都是在Swift 3.0发布之前编写的,因此代码不会随之而来。在我的回复声明中return prime我收到错误说

  

变量'素数'在初始化之前使用

这是我的源代码:

func nthPrimeNumber(_ n: Int) -> Int {
var prime: Int
var modulo: Int
var checkPrime: Bool
var count = 0
for prime in stride(from: 2, to: 50, by: 1)
{
    if (count < n){
        checkPrime = true;
        for modulo in stride(from: 2, to: prime, by: 1)
        {
            if ((prime % modulo) == 0 )
            {
                checkPrime = false
            }
        }
        if (checkPrime)
        {
            count += 1
        }
    }
}

return prime
}

2 个答案:

答案 0 :(得分:2)

@ BenjaminLowry的更改将修复编译器警告,但算法仍然是错误的。这里的问题是函数使用的第一个prime,for循环中使用的第二个prime是自变量,因此for循环中使用的值不会影响您的结果,并且因此你的函数将始终返回0.相反,你需要做这样的事情:

func nthPrimeNumber(_ n: Int) -> Int {
    var result: Int = 0
    var checkPrime: Bool
    var count = 0
    for prime in stride(from: 2, to: 50, by: 1)
    {
        if (count < n){
            checkPrime = true;
            for modulo in stride(from: 2, to: prime, by: 1)
            {
                if ((prime % modulo) == 0 )
                {
                    checkPrime = false
                }
            }
            if (checkPrime)
            {
                count += 1
                result = prime
            }
        }
    }

    return result
}

modulo的2次使用也是如此。外modulo未使用,可以删除。

答案 1 :(得分:1)

prime在初始化时需要有一个值,例如

var prime: Int = 0

否则编译器会抱怨,因为理论上如果if语句中的代码没有运行,那么prime就没有值,然后返回。由于您返回的是非可选值Int,因此无论如何都必须确保它具有值。