[Shell Script] Kiểm tra số nguyên tố đối xứng

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:

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?

Phân tích bài toán số nguyên tố đối xứng shellscript

  1. songuyento () { ... }: Đây là định nghĩa của hàm songuyento, 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ụng bc.
    • 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ủa a 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ủa a, trả về 0 (đánh dấu là số nguyên tố).
  2. doixung () { ... }: Đây là định nghĩa của hàm doixung, 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ến m bằng giá trị của b.
    • 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ào k.
    • Sau khi hoàn thành vòng lặp, kiểm tra xem m có bằng k 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).
  3. Phần chính của script:
    • Kiểm tra xem cả hai biến pq đề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.

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

Kết quả

[Shell Script] Kiểm tra số nguyên tố đối xứng

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.

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em