Go 语言程序,用于查找数组中的素数


在本教程中,我们将展示如何使用不同的示例从数组中查找素数。素数是指只能被 1 或自身整除的数,它们除了这两个因子之外没有其他因子。现在,我们将向您展示一些示例,以帮助您了解此程序背后的逻辑。

方法 1:在主函数中查找素数

在这种特定方法中,我们将借助嵌套 for 循环打印素数。在每次内部迭代中,我们将数组元素减半,并检查它们是否可以被其他数字整除。让我们来看一看并理解它。

算法

步骤 1 − 创建一个包 main,并在程序中导入 fmt 包。

步骤 2 − 创建一个 main 函数来执行程序,并在 main 函数中进一步创建一个数组,从中搜索素数。

步骤 3 − 在 main 中创建一个名为 flag 的变量,初始值为 0。

步骤 4 − 运行一个循环,从 i=2 到 i<=len(arr)-1,此循环为外循环,j=2 到 j<arr[i]/2 为内循环,内循环将在外循环的每次迭代中执行。

步骤 5 − 当外循环开始时初始化 flag=0,并在内循环的第一次迭代中检查 arr[i]%j==0。

步骤 6 − 如果条件满足,则将 flag 设置为 1 并中断循环,因为如果元素在其一半之前不可被整除,则它将不会被任何其他数字在前面整除。

步骤 7 − 运行循环直到它终止,如果在任何迭代中条件不满足,则在循环外部检查一个条件,如果 flag 等于 0 或数组元素大于 1。

步骤 8 − 如果发现此条件为真,则表示该元素是素数,因此打印它。

步骤 9 − 使用 fmt.printf() 函数执行打印语句,其中包含 %d,用于打印数组元素。

示例

Go 语言程序,通过在主函数中将数组元素减半来查找素数

package main
import "fmt"
func main() {
   arr := [6]int{10, 11, 12, 13, 65, 73}
   fmt.Println("The array elements are: ", arr)
   
   var flag int = 0
   fmt.Printf("Prime Numbers: \n")
   for i := 0; i <= len(arr)-1; i++ {
      flag = 0
      for j := 2; j < arr[i]/2; j++ {
         if arr[i]%j == 0 {
            flag = 1
            break
         }
      }
      if flag == 0 && arr[i] > 1 {
         fmt.Printf("%d ", arr[i])
      }
   }
}

输出

The array elements are:  [10 11 12 13 65 73]
Prime Numbers: 
11 13 73 

方法 2:在用户定义函数中使用平方根

在这种方法中,我们将创建一个外部函数,并将范围作为参数,然后将使用 sqrt 函数查找元素的平方根,从中我们可以检查数字是否可以被该范围内的数字整除。让我们来看一看,了解更多信息。

算法

步骤 1 − 创建一个包 main,并在程序中导入 fmt 和 math 包。

步骤 2 − 创建一个名为 printPrimeNumbers 的函数,其参数 num1 和 num2 表示要从中搜索素数的范围。

步骤 3 − 在函数中检查条件,即范围 num1 小于 2 且 num 也小于 2,如果条件满足,则打印数字大于 2 并返回。

步骤 4 − 运行一个循环,直到 num1<=num2 将 isprime 标志设置为 true,并运行一个内部循环,从 i=0 到 i <= int(math.Sqrt(float64(num1))),其中 sqrt 用于查找数组元素的平方根。

步骤 5 − 检查条件,如果 num1 可被整除,则将 isprime 设置为 false,中断循环并增加 num1 的值。

步骤 6 − 但是,如果在任何迭代中条件不满足,则循环终止并打印素数。

步骤 7 − 从 main 中调用函数,并将范围元素作为参数。

步骤 8 − 使用 fmt.Println() 函数执行打印语句。

示例

Go 语言程序,使用用户创建函数中的 sqrt 函数从数组中查找素数

package main
import (
   "fmt"
   "math"
)
func printPrimeNumbers(num1, num2 int) {
   if num1 < 2 || num2 < 2 {
      fmt.Println("Numbers must be greater than 2.")
      return
      
   }
   for num1 <= num2 {
      isPrime := true
      for i := 2; i <= int(math.Sqrt(float64(num1))); i++ {
         if num1%i == 0 {
            isPrime = false
            break
            
         }
      }
      if isPrime {
         fmt.Printf("%d ", num1)
      }
      num1++
      
   }
   
}
func main() {
   var range1 int = 4
   var range2 int = 100
   fmt.Println("The range from which prime numbers have to be searched is from", range1, "to", range2)
   fmt.Println("The following prime numbers are: ")
   printPrimeNumbers(4, 100)
}

输出

The range from which prime numbers have to be searched is from 4 to 100
The following prime numbers are: 
5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

结论

在上述教程中,我们使用两种方法在数组中搜索素数。在第一种方法中,我们使用了主函数,其中我们将数组元素减半并搜索素数。在第二种方法中,我们使用了一个带有 sqrt 方法的外部函数来查找数组元素的平方根并打印素数。因此,所有方法都成功执行。

更新于: 2023年2月13日

379 次查看

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告