天天看點

【Go語言入門100題】028 判斷素數 (10 分) Go語言 | Golang

L1-028 判斷素數 (10 分) Go語言|Golang

本題的目标很簡單,就是判斷一個給定的正整數是否素數。

輸入格式:

輸入在第一行給出一個正整數N(≤ 10),随後N行,每行給出一個小于2^31 的需要判斷的正整數。

輸出格式:

對每個需要判斷的正整數,如果它是素數,則在一行中輸出Yes,否則輸出No。

輸入樣例1:

2
11
111      

結尾無空行

輸出樣例1:

Yes
No      

思路:

什麼是素數?也稱質數。一個大于1的正整數,如果除了1和它本身以外,不能被其他正整數整除,就叫素數。

如2,3,5,7,11,13,這些隻能被自己說是1整除,但是不能被其他正整數整除。

是以我們隻需要先判斷這個數是不是1,因為這個數很特殊,然後我們在從2到這個數進行判斷,看看有沒有數能把将他整除。沒有的話就是素數了。

代碼如下:

package main

import (
    "fmt"
    "math"
)

func main() {
    var nums int
    _,_=fmt.Scan(&nums)
    for i:=0;i<nums;i++{
        var num int
        _,_=fmt.Scanln(&num)
        if Su(num) {
            if i==nums-1 {
                fmt.Printf("Yes")  // 控制最後一行的回車,其實用清單存起來可能會了解簡單一點。
            }else{
                fmt.Printf("Yes\n")
            }
        }else{
            if i==nums-1 {      // 控制最後一行的回車
                fmt.Printf("No")
            }else{
                fmt.Printf("No\n")
            }
        }
    }
}

func Su(num int) bool {
    if num==1 { // 1不是質數
        return false
    }
    for i:=2;i<int(math.Sqrt(float64(num)))+1;i++{  // 直接開根号,能讓這個數的範圍減少
        if num%i==0 {  // 如果能有數被整出,那麼就不是素數了
            return false
        }
    }
    return true
}