我正在学习快速,并且我已经编写了两个功能,并且已经尝试了它们自己,它们都很好地工作。但是,当我尝试在另一个函数中调用一个函数时,似乎无法获得所需的输出。
当前的任务是,一个函数应打印素数,而另一个函数应进行计算,并且检查数字是否是素数。我应该从打印素数函数中调用检查素数是否是素数。
下面是我的代码:
此函数计算X:Int是否为质数。设置为布尔值是因为我应该在其下面的函数中打印“ true”或“ false”。
func isPrime(_ x: Int) -> Bool {
if(x%2 == 0 || x%3 == 0){
if(x == 2 || x == 3){
return(true)
}
return(false)
}
else{
//if the number is less than or equal to 1, we'll say it's not prime
if(x <= 1){
return(false)
}
}
return true
}
此段计算从1到n的素数的打印。
func PrintPrimes(upTo n: Int) {
for x in 1...n {
var count = 0
for num in 1..<x {
isPrime(x)
count += 1
}
if count <= 1 {
print(isPrime(x))
}
}
}
此作品仅运行两次,我不确定为什么。我不知道是否是因为我没有正确调用它,或者我不得不改变一些计算方法。
感谢所有帮助
编辑:
这里是原始printPrimes(),在我决定在函数中调用isPrime之前。此函数仅计算素数并将其打印到n。
func printPrimes(upTo n: Int) {
for x in 1...n {
var count = 0
for num in 1..<x {
if x % num == 0 {
count += 1
}
}
if count <= 1 {
print(x)
}
}
}
您的第二个例程仅打印两个值,因为它正在调用isPrime
,但绝不对返回的值做任何条件,而无论如何都要递增count
。而且由于仅在count
为<= 1
的情况下才进行打印,因此仅在n
的前两个值时才发生。
但是,假设您尝试将素数打印到一定数量,可以这样做:
func printPrimes(upTo n: Int) { for x in 1..<n { if isPrime(x) { print(x) } } }
[不幸的是,
isPrime
也不正确。因此,您必须先解决该问题。例如,考虑25。该数字不能被2或3整除,但也不是素数。