func step(_ g: Int, _ m: Int, _ n: Int) -> (Int, Int)? {
var z = [m]
var x = m
var y = n
while x < y {
x += 1
z += [x]
}
for i in z {
var k = 2
while k < n {
if i % k != 0 && i != k {
}
k += 1
}
}
print(z)
return (0, 0)
}
print (step(2, 100, 130))
因此它当前以数组的形式返回数字100-130的集合。整体功能将比我要求的更多但是现在我只想创建一个数字,取数字100-130,或更具体地说数字x-y并返回一个素数数组。 if i%k部分需要帮助。是的,我知道它是多余的和拉长的,但我是新的。据说只是尝试使用简单的快捷方式。 据说我也可以通过各种方法来提高它的效率,但是我需要解释其中的一些,因为......我很新。对于上下文假设只是这样做了20-30天(一般编码)
答案 0 :(得分:0)
你可以这样做:
let a = 102
let b = 576 // two numbers you want to check within
/**** This function returns your array of primes ****/
func someFunc(x: Int, y: Int) -> [Int] {
var array = Array(x...y) // This is a quick way to map and create array from a range . /// Array(1...5) . ---> [1,2,3,4,5]
for element in array {
if !isPrime(n: element) { // check if numberis prime in a for loop
array.remove(at: array.index(of: element)!) // remove if it isnt
}
}
return array
}
someFunc(x: a, y: b) //this is how you call this func. someFunc(x: 4, y: 8) ---> [5, 7]
// THis is a supporting function to find a prime number .. pretty straight forward, explanation in source link below.
func isPrime(n: Int) -> Bool {
if n <= 1 {
return false
}
if n <= 3 {
return true
}
var i = 2
while i*i <= n {
if n % i == 0 {
return false
}
i = i + 1
}
return true
}
答案 1 :(得分:0)
首先,在可能的情况下将逻辑分离为函数是个好主意。例如。这是一个用于计算数字是否为素数的通用函数(改编自this answer):
func isPrime<T>(_ n: T) -> Bool where T: BinaryInteger {
guard n > 1 else {
return false
}
guard n > 3 else {
return true
}
var i = T(2)
while (i * i) <= n {
if n % i == 0 {
return false
}
i += 1
}
return true
}
要逐步获取数字,Swift提供stride
功能。所以你的功能可以简化为:
func step(_ g: Int, _ m: Int, _ n: Int) -> (Int, Int)? {
let z = stride(from: m, to: n, by: g).filter { isPrime($0) }
print(z)
return (0, 0)
}
要解释一下,stride
将返回您想要单步执行的Sequence
个数字,然后您可以filter
仅获取那些返回true
的数字传递给函数isPrime
。
顺便说一下,你print(step(2, 100, 130))
的例子应该什么都不打印,因为你会检查从100到130的所有偶数,这显然是非素数。
我还建议您不要使用单字母变量名。 g
,m
,n
和z
不具有描述性。您希望清晰简洁,以便其他人能够理解您的代码。
答案 2 :(得分:0)
这将返回两个数字之间的素数数组:
module.exports = function(config) {
config.set({
files: [
'path-to-angular.js',
'www/js/services/api.service.js',
'test/**/*.test.js'
],
})
}
在扩展名中,你基本上循环遍历2和所选数字/ 2之间的每个数字,以检查它是否可分,如果是,则返回false,否则返回true。
extension Int {
func isPrime() -> Bool {
if self <= 3 { return self == 2 || self == 3 }
for i in 2...self/2 {
if self % i == 0 {
return false
}
}
return true
}
}
func getPrimes(from start: Int, to end: Int) -> [Int] {
var primes = [Int]()
let range = start > end ? end...start : start...end
for number in range {
if number.isPrime() { primes.append(number) }
}
return primes
}
基本上包含2个数字,如果起始编号高于他们切换的结束编号(故障安全)。然后你只需要在扩展名的帮助下检查数字是否为素数,如果它是素数,则将值附加到数组。
getPrimes()
如果您想采取高于func step(_ steps: Int, _ start: Int, _ end: Int) {
var primes = [Int]()
var number = start
repeat {
if number.isPrime() { primes.append(number) }
number+=steps
} while number <= end
}