Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 素数打印范围为2…100_Swift - Fatal编程技术网

Swift 素数打印范围为2…100

Swift 素数打印范围为2…100,swift,Swift,我被指派了一项任务,打印范围为2…100的素数。我已经设法得到了大多数素数,但不知道如何去掉9和15,基本上是3和5的倍数。请给我你的建议,我如何解决这个问题 for n in 2...20 { if n % 2 == 0 && n < 3{ print(n) } else if n % 2 == 1 { print(n) } else if n % 3 == 0 && n > 6 {

我被指派了一项任务,打印范围为2…100的素数。我已经设法得到了大多数素数,但不知道如何去掉9和15,基本上是3和5的倍数。请给我你的建议,我如何解决这个问题

for n in 2...20 {
    if n % 2 == 0 && n < 3{
        print(n)
    } else if n % 2 == 1 {
        print(n)
    } else if n % 3 == 0 && n > 6  {
    }
}

寻找素数的有效算法之一是。它是基于这样一种想法,你们已经对给定范围内的所有数字数组进行了排序,你们从一开始就删除了当前数字后面的所有数字,这些数字可以被这个数字整除,这个数字就是素数。重复此操作,直到选中数组中的最后一个元素

这是我的算法,它应该实现我上面描述的功能:

func primes(upTo rangeEndNumber: Int) -> [Int] {
    let firstPrime = 2
    guard rangeEndNumber >= firstPrime else {
        fatalError("End of range has to be greater than or equal to \(firstPrime)!")
    }
    var numbers = Array(firstPrime...rangeEndNumber)

    // Index of current prime in numbers array, at the beginning it is 0 so number is 2
    var currentPrimeIndex = 0

    // Check if there is any number left which could be prime
    while currentPrimeIndex < numbers.count {
        // Number at currentPrimeIndex is next prime
        let currentPrime = numbers[currentPrimeIndex]

        // Create array with numbers after current prime and remove all that are divisible by this prime
        var numbersAfterPrime = numbers.suffix(from: currentPrimeIndex + 1)
        numbersAfterPrime.removeAll(where: { $0 % currentPrime == 0 })

        // Set numbers as current numbers up to current prime + numbers after prime without numbers divisible by current prime
        numbers = numbers.prefix(currentPrimeIndex + 1) + Array(numbersAfterPrime)

        // Increase index for current prime
        currentPrimeIndex += 1
    }

    return numbers
}

print(primes(upTo: 100)) // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
print(primes(upTo: 2)) // [2]
print(primes(upTo: 1)) // Fatal error: End of range has to be greater than or equal to 2!
func素数(最长rangeEndNumber:Int)->[Int]{
设firstPrime=2
guard rangeEndNumber>=firstPrime else{
fatalError(“范围结束必须大于或等于\(firstPrime)!”)
}
变量编号=数组(firstPrime…rangeEndNumber)
//数组中当前素数的索引,开始时为0,所以数字为2
var currentPrimeIndex=0
//检查是否还有可能是素数的数字
而currentPrimeIndex
我终于明白了,哈哈,它可能不漂亮,但很管用,哈哈,谢谢大家的回答。我会发布我的想法,如果它可能会帮助其他人

for n in 2...100 {
    if n % 2 == 0 && n < 3{
        print(n)
    } else if n % 3 == 0 && n > 6 {
    } else if n % 5 == 0 && n > 5 {
    } else if n % 7 == 0 && n > 7{
    } else if n % 2 == 1 {
        print(n)
    }
}
用于2…100中的n{
如果n%2==0&&n<3{
打印(n)
}否则,如果n%3==0&&n>6{
}否则,如果n%5==0&&n>5{
}否则,如果n%7==0&&n>7{
}如果n%2==1,则为else{
打印(n)
}
}
专为Swift 5设计 与其他答案不同,这很容易扩展。我没有包括一个预先制作好的素数列表,这对于没有被包括在内的非常大的数是不起作用的

这是我提出的算法。我尽可能地提高了效率,系数只上升到
数字的
平方根的
。这减少了在比较那些永远不起作用的因素时浪费的时间

import Foundation


// Function to determine whether a number is prime
func isPrime(_ num: Int) -> Bool {
    let max = Int(floor(sqrt(Double(num))))
    guard max >= 2 else { return true }
    
    for factor in 2...max {
        if num.isMultiple(of: factor) { // Write num % factor == 0 for older versions of Swift
            return false
        }
    }
    
    return true
}


// Find if a number is prime for numbers 2 to 200
for i in 2...100 {
    if isPrime(i) {
        print(i)
    }
}

素数是什么:素数是只有两个因子的正整数,1和整数本身

 //Funtion Call 
findPrimeNumberlist(fromNumber: 1, toNumber: 100)

//您可以使用此功能打印任何范围素数。
func findPrimeNumberlist(fromNumber:Int,tonNumber:Int)
{
因为我从数字…到数字
{
var isPrime=true

如果我让你先用谷歌搜索一下。看看这个——这是大学的家庭作业吗?也许可以试着通过实现来解决这个问题。这个算法会给你N以下的素数,如果你在这方面有问题,请随时再问。你还需要处理
N%5==0 | | N%3==0
。你也不能保证一个数字是正确的不能被另一个素数整除,所以你的测试可能不会给出可靠的结果-搜索埃拉托斯坦筛。这是一个非常好的旅行领域,特别是现在斯威夫特已经存在了一段时间。你有没有看一下LeetCode解决方案?看看这里哦,伙计,这对我的水平来说似乎仍然很复杂,但也许很快我就会得到它。Thanks!对于大范围内的素数,筛选方法比试算除法的规模更大。你可能需要对答案进行解释。
 //Funtion Call 
findPrimeNumberlist(fromNumber: 1, toNumber: 100)
//You can print any range Prime number using this fucntion. 

func findPrimeNumberlist(fromNumber:Int, toNumber: Int)
{
 for i in fromNumber...toNumber
        {
            var isPrime = true
            if i <= 1 { // number must be positive integer
                isPrime = false 
            }
            else if i <= 3 {
                isPrime = true
            }
            else {
                for j in 2...i/2 // here i am using loop from 2 to i/2 because it will reduces the  iteration.
                {
                    if i%j == 0 { // number must have only 1 factor except 1. so use break: no need to check further 
                        isPrime = false
                        break
                    }
                }
            }
            if isPrime  {
                print(i)
            }
        }
}