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