shell判斷乙個數是否是素數

2021-10-08 15:21:44 字數 1668 閱讀 9676

#!/bin/bash

#author:cuipeng

read -p "請輸入乙個大於1的整數: " num

num1=

$(bc

<<< "sqrt($num)

")reult=true

for x in `

seq 2 $num1`

do num2=$(

expr $num % $x)

if [ $num2 -eq 0 ];then

reult=false

break

fidone

if [ $reult == true -a $num -ne 1 ];then

echo "

$num是素數"

else

echo

"$num不是素數"

fi

首先我們要知道素數是什麼:素數也稱質數,指乙個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數。

那麼如何判斷乙個數是否為素數:最簡單的方法就是試除法了,將該數n用小於等於根號n的所有素數去試除,若均無法整除,n則為素數。

那麼在程式設計中,通常採用2到根號n之間的所有整數去試除,若均無法整除,則n為素數。

read -p "請輸入乙個大於1的整數: " num

# read是用來讀取使用者輸入資訊的命令,能夠把接收到的使用者輸入資訊賦值給後面的指定變數,-p引數用於向使用者顯示一定的提示資訊。

# 這裡是將使用者輸入的資訊賦值給num變數。

num1=

$(bc

<<< "sqrt($num)

")#num1=$(

echo

|awk '')

# 使用bc命令,計算變數num值的平方根,取整,將值賦值給變數num1。

# 當然bc命令需要安裝,也可以使用awk。

reult=true

# 定義變數reult布林值為true

for x in `

seq 2 $num1`

# 迴圈從序列中提取值賦值給變數x。

# "seq 2 $num1"表示生成乙個從2到變數num1的連續序列,如"seq 2 5"即生成2、3、4、5。

do num2=

$(expr $num % $x)

# 使用expr進行取餘計算,賦值給num2。if[

$num2 -eq 0 ]

;then

# 使用if語句判斷變數num2是否等於0(等於0表示這個數被整除,不為素數),等於0則執行以下**。

reult=false # 更改變數reult布林值為false。

break

# 結束當前迴圈,但會執行迴圈之後的所有**。

fidoneif[

$reult

==true -a $num -ne 1 ]

;then

# if判斷變數reult布林值是否為true且變數num值不等於1,滿足則執行以下**。

echo

"$num是素數"

else

# 否則就執行以下**,即變數reult布林值是為false。

echo

"$num不是素數"

fi

注:關於bc命令用法跳轉

判斷乙個數是否是素數

素數釋義 曾稱質數。乙個大於1的正整數,如果除了1和它本身以外,不能被其他正整數整除,就叫素數。如2,3,5,7,11,13,17 public boolean isprime int n for int i 2 i從2開始,一直到小於其自身,依次判斷能否被n整除即可,能夠整除則不是質數,否則是質數...

判斷乙個數是否是素數

一 判斷乙個數是否是素數 思想 拿比自己小的整數依次進行比較 public string issu int a return 是 演算法改進 只要小於該數字的二次根就可以了,因為大於該數字的二次根的數字也是不能整除的 public string issu int a return 是 二 實現乙個氣...

判斷乙個數是否為素數

判斷乙個數n是否是素數,只需要判斷它是否能被2到n之間的數整除就行了,若不能被整除,則說明是素數。考慮到某數大於n 2時,n不可能被該數整除,故只需遍歷2 n 2即可。更進一步,由合數定理可知,若乙個數是合數,則它的最小質因數必小於等於該數的平方根,由此可得更為高效的 如下 include incl...