素数Swift 3

素数Swift 3,swift,for-loop,math,primes,Swift,For Loop,Math,Primes,经过几个小时的谷歌搜索,我仍然处于停顿状态。如果有人能指出我选择的公式或编码中的错误,我将不胜感激。请记住,我是斯威夫特的新手。我不习惯非C风格的循环 if textField.text != "" { input = Double(textField.text!)! // parse input // return if number less than 2 entered if input < 2 {

经过几个小时的谷歌搜索,我仍然处于停顿状态。如果有人能指出我选择的公式或编码中的错误,我将不胜感激。请记住,我是斯威夫特的新手。我不习惯非C风格的循环

    if textField.text != "" {
        input = Double(textField.text!)!    // parse input

        // return if number less than 2 entered
        if input < 2 {
            resultLabel.text = "Enter a number greater than or equal to 2."

            return;
        }

        // get square root of input and parse to int
        inputSquared = Int(sqrt(input));

        // loop from 2 to input iterating by 1
        for i in stride(from: 2, through: input, by: 1) {
            if inputSquared % Int(i) == 0 {
                resultLabel.text = "\(Int(input)) is not a prime number."
            }
            else {
                resultLabel.text = "\(Int(input)) is a prime number!"
            }
        }
    }

我不知道如何找到素数的公式。在查阅了多个公式后,我大致确定了这一个。然而,每个结果都是一个素数。所以我的条件是错误的。我只是不知道如何修复它。

检查我的算法。它是有效的。但我不确定这是一个有效的素数算法

   var input:Int = 30
    var isPrime:Bool = true


if(input == 2){
    print("Input value 2 is prim number")
}
else if(input < 2){
    print("Input value must greater than 2")
}
else{
for i in 2...input-1{
    if((input%i) == 0){
        isPrime = false
        break;
    }
}
if(isPrime){
    print("Your Input Value \(input) is Prime!")
}
}

在操场上试试这个代码,你会得到这个更好的想法,当你尝试swift时,尝试使用操场,因为你不熟悉swift操场是最好的

let input = 13 // add your code that take value from textfield
var prime = 1

// throw error less than 2 entered
if input < 2 {
    assertionFailure("number should be 2 or greater")
}

// loop from 2 to input iterating by 1
for i in stride(from: 2, to: input, by: 1) {
    if input % i == 0{
        prime = 0
    }
}

if prime == 1 {
    print("\(input) number is prime")
} else {
    print("\(input) number is not prime")
}

已经发布了一些可行的解决方案,但没有一个能解释为什么你的解决方案不可行。然而,有些评论很接近


您的基本问题是,取输入的平方根,然后从2迭代到输入,检查平方根的整数部分是否可被i整除。你搞错了。您需要从2迭代到平方根,并检查输入是否可被i整除。如果是,则停止,因为输入不是素数。如果你在结尾没有找到除数,你就得到了一个素数。

你应该跨过:Intsqrtinput,然后检查输入%iI,我认为应该是sqrtinput.rounded.up@jtbandes@jtbandes这确实使我的代码更有效率。非常感谢。我在那里输入了%I,因为var I被自动转换成一个double,这给了我一个不能用int和double进行模块化的错误。不过,我的公式还是不正确的。我应该在if语句中使用return语句吗ạ在我看到的另一个例子中,有人在使用floorsqrtinput。但是,它将变量保持为双精度。所以我切下地板,把它解析成一个int。我试着把你们的答案带到操场上。它表示for循环写得不正确。我对for循环不够熟悉,不知道如何正确地编写它。二进制运算符“…”无法应用于int和Double类型的操作数。您的输入值似乎是Double数据类型。在我的示例中,我已将输入值定义为integer。因此,我的循环工作正常。您是正确的,这工作正常!问题是我得到的是输入的平方根。在我看到的很多公式中,人们都在这样做。我刚刚用math.com的素数计算器测试了一些输入,看看这是否正确,它成功了!是的,这很有效!我以前得到的是输入的平方根。这就是把我搞砸的原因。我不知道assertionFailure是什么,如果我使用自己还没有学会的代码,我会遇到麻烦。但是,如果未来是这样的话,我会确保更多地了解它。谢谢你的帮助,@Nikunj Damanisure你应该尝试探索swift: