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ốa
có 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
a
có 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
a
bằng cách sử dụngbc
. - Sử dụng vòng lặp for để kiểm tra xem
a
có chia hết cho bất kỳ số nào trong khoảng từ 2 đến căn bậc hai củaa
không. Nếu có, trả về 1 (đánh dấu không phải số nguyên tố). - Cuối cùng, nếu
a
khô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ốb
có 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
k
bằng 0 và biếnm
bằng giá trị củab
. - Sử dụng vòng lặp while để đảo ngược số
b
bằ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
m
có bằngk
khô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
p
vàq
đều bằng 0 hay không, nếu có, thì sốn
là 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ốn
khô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ả
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