素数 Swift 3
Prime Numbers Swift 3
经过几个小时的谷歌搜索,我仍然处于停滞状态。如果有人指出我的公式或编码选择中的错误,我将不胜感激。请记住我是 Swift 的新手。我不习惯非 C 风格的 for 循环。
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!"
}
}
}
我不知道如何找到质数的公式。在查找了多个公式后,我已经确定了这个。然而,每个结果都是质数。所以我的if条件是错误的。我只是不知道如何解决它。
检查我的 algorithm.It works.But 我不确定这是一个有效的素数算法
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!")
}
}
在 playground 中尝试此代码你会得到更好的想法,并在尝试 swift 时尝试使用 playground,因为你不熟悉 swift playground 是最好的。
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")
}
已经发布了一些可行的解决方案,但其中 none 解释了为什么您的解决方案不起作用。然而,有些评论接近。
你的基本问题是你取输入的平方根,然后从 2 迭代到输入检查平方根的整数部分是否能被 i 整除。你弄错了。您需要从 2 迭代到平方根并检查输入是否可以被 i 整除。如果是,则停止,因为输入不是素数。如果你走到最后没有找到一个除数,你就有了一个素数。
经过几个小时的谷歌搜索,我仍然处于停滞状态。如果有人指出我的公式或编码选择中的错误,我将不胜感激。请记住我是 Swift 的新手。我不习惯非 C 风格的 for 循环。
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!"
}
}
}
我不知道如何找到质数的公式。在查找了多个公式后,我已经确定了这个。然而,每个结果都是质数。所以我的if条件是错误的。我只是不知道如何解决它。
检查我的 algorithm.It works.But 我不确定这是一个有效的素数算法
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!")
}
}
在 playground 中尝试此代码你会得到更好的想法,并在尝试 swift 时尝试使用 playground,因为你不熟悉 swift playground 是最好的。
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")
}
已经发布了一些可行的解决方案,但其中 none 解释了为什么您的解决方案不起作用。然而,有些评论接近。
你的基本问题是你取输入的平方根,然后从 2 迭代到输入检查平方根的整数部分是否能被 i 整除。你弄错了。您需要从 2 迭代到平方根并检查输入是否可以被 i 整除。如果是,则停止,因为输入不是素数。如果你走到最后没有找到一个除数,你就有了一个素数。