Số nguyên tố đối xứng là một loại số nguyên tố đặc biệt mà bạn có thể đọc từ trái sang phải và từ phải sang trái mà vẫn giữ nguyên giá trị ban đầu. Trong bài viết này, chúng ta sẽ tìm hiểu về số nguyên tố đối xứng và học cách kiểm tra chúng bằng Shell Script.
Xem thêm:
1. Bài toán kiểm tra số nguyên tố đối xứng
Bài toán: Viết chương trình kiểm tra 1 số nguyên được truyền vào dưới dạng tham số có phải là số nguyên tố đối xứng hay không?
2. Phân tích bài toán số nguyên tố đối xứng shellscript
songuyento () { ... }: Đây là định nghĩa của hàmsonguyento, mà bạn có thể gọi sau đó để kiểm tra xem sốacó phải là số nguyên tố hay không.- Hàm này nhận một tham số
a. - Kiểm tra xem
acó nhỏ hơn 2 không. Nếu có, trả về 1 (đánh dấu không phải số nguyên tố). - Tính căn bậc hai của
abằng cách sử dụngbc. - Sử dụng vòng lặp for để kiểm tra xem
acó chia hết cho bất kỳ số nào trong khoảng từ 2 đến căn bậc hai củaakhông. Nếu có, trả về 1 (đánh dấu không phải số nguyên tố). - Cuối cùng, nếu
akhông chia hết cho bất kỳ số nào trong khoảng từ 2 đến căn bậc hai củaa, trả về 0 (đánh dấu là số nguyên tố).
- Hàm này nhận một tham số
doixung () { ... }: Đây là định nghĩa của hàmdoixung, mà bạn có thể gọi sau đó để kiểm tra xem sốbcó phải là số đối xứng hay không.- Hàm này nhận một tham số
b. - Khởi tạo biến
kbằng 0 và biếnmbằng giá trị củab. - Sử dụng vòng lặp while để đảo ngược số
bbằng cách lấy từng chữ số cuối cùng và thêm vàok. - Sau khi hoàn thành vòng lặp, kiểm tra xem
mcó bằngkkhông. Nếu có, trả về 0 (đánh dấu là số đối xứng), ngược lại, trả về 1 (đánh dấu không phải số đối xứng).
- Hàm này nhận một tham số
- Phần chính của script:
- Kiểm tra xem cả hai biến
pvàqđều bằng 0 hay không, nếu có, thì sốnlà số nguyên tố đối xứng và hiển thị thông báo tương ứng, ngược lại, hiển thị thông báo rằng sốnkhông phải là số nguyên tố đối xứng.
- Kiểm tra xem cả hai biến
3. Code
#!/bin/bash
songuyento () {
a=$1
if [ $a -lt 2 ]
then
return 1
fi
sqrt_a=$(echo "sqrt($a)" | bc)
for ((i = 2; i <= $sqrt_a ; i++))
do
if [ $(($a % $i)) -eq 0 ]
then
return 1
fi
done
return 0
}
doixung () {
b=$1
k=0
m=$b
while [[ $b -ne 0 ]]
do
k=`expr $k \* 10 + $b % 10`
b=`expr $b / 10`
done
if [[ $m -ne $k ]]
then
return 1
else
return 0
fi
}
echo "Nhap n:"
read n
songuyento $n
p=$?
doixung $n
q=$?
if [ $p -eq 0 -a $q -eq 0 ]
then
echo "$n la so nguyen to doi xung."
else
echo "$n khong la so nguyen to doi xung."
fi
4. Kết quả
![[Shell Script] Kiểm tra số nguyên tố đối xứng](https://ttnguyen.net/wp-content/uploads/2023/09/so-nguyen-to-doi-xung-shell-script.png)
Ngoài ra, bạn có thể thử một số bộ test sau:
Bộ test 1:
- Nhập n = 2 (là số nguyên tố đối xứng)
- Kết quả đầu ra: “2 la so nguyen to doi xung.”
Bộ test 2:
- Nhập n = 11 (là số nguyên tố đối xứng)
- Kết quả đầu ra: “11 la so nguyen to doi xung.”
Bộ test 3:
- Nhập n = 131 (là số nguyên tố đối xứng)
- Kết quả đầu ra: “131 la so nguyen to doi xung.”
Bộ test 4:
- Nhập n = 7 (là số nguyên tố, nhưng không đối xứng)
- Kết quả đầu ra: “7 khong la so nguyen to doi xung.”
Bộ test 5:
- Nhập n = 999 (không phải số nguyên tố, cũng không đối xứng)
- Kết quả đầu ra: “999 khong la so nguyen to doi xứng.”
Bộ test 6:
- Nhập n = 787 (là số nguyên tố đối xứng)
- Kết quả đầu ra: “787 la so nguyen to doi xứng.”
Bộ test 7:
- Nhập n = 121 (không phải số nguyên tố, nhưng đối xứng)
- Kết quả đầu ra: “121 khong la so nguyen to doi xứng.”
Bộ test 8:
- Nhập n = 0 (làm cho người dùng nhập lại cho đến khi n > 0)
- Tiếp theo, nhập n = 353 (là số nguyên tố đối xứng)
- Kết quả đầu ra: “353 la so nguyen to doi xứng.”
Bộ test 9:
- Nhập n = -5 (làm cho người dùng nhập lại cho đến khi n > 0)
- Tiếp theo, nhập n = 151 (là số nguyên tố đối xứng)
- Kết quả đầu ra: “151 la so nguyen to doi xứng.”
Việc sử dụng Shell Script để kiểm tra số nguyên tố đối xứng không chỉ giúp chúng ta hiểu sâu hơn về lập trình mà còn thúc đẩy khả năng tối ưu hóa mã nguồn của chúng ta. Cảm ơn bạn đã dành tham khảo trên môn quản trị linux trên ttnguyen.net.
Bài viết liên quan:
vòng lặp trong shell script
một số toán tử trong shell script