Bài tập  /  Bài đang cần trả lời

Giải bài toán sau bài codeblock

Mr Bon là cậu em trai song sinh của Mr Bin. Cậu ấy cũng đang học các con số, cậu ấy tính tổng các chữ số của một số nguyên dương n cho trước được một số nguyên dương a. Tiếp đến cậu lại đi tìm chữ số lớn nhất của n và viết ghép chữ số lớn nhất đó vào sau số a thu được số nguyên dương k. Mr Bon muốn biết k có phải là số nguyên tố hay không? Nếu số đó là nguyên tố thì cậu gọi số đó là số "binbon". Ví dụ số 111 là một số "binbon" vì tổng các chữ số là a=3, chữ số lớn nhất là 1 nên số k lập được là 31, số 31 là một số nguyên tố nên n=111 là số "binbon". Thú vị với suy nghĩ này cậu bé muốn kiểm tra một loạt các số có phải là số "binbon" hay không? Hãy giúp cậu bé nhé!

Vào: Dòng đầu ghi số nguyên dương t là số test (0<t≤1000).

       t dòng sau mỗi dòng ghi số nguyên dương n (0<n≤101000).

Ra: in ra t dòng, mỗi dòng ghi YES hoặc NO nếu số tương ứng là "binbon" hoặc không.
codeblock

2 Xem trả lời
Hỏi chi tiết
171
Tham khảo câu trả lời từ Trợ lý ảo Lazi
Chúng ta sẽ giải bài toán trong một chương trình Python. Để xác định một số `n` có thuộc dạng "binbon" hay không, chúng ta thực hiện các bước sau:

1. Tính tổng các chữ số của `n` để tìm số nguyên `a`.
2. Tìm chữ số lớn nhất trong số `n` để lấy số này.
3. Ghép chữ số lớn nhất vào sau số `a` để tạo thành số `k`.
4. Kiểm tra xem số `k` có phải là số nguyên tố hay không.

Dưới đây là mã Python thực hiện các bước này:

```python
def is_prime(num):
if num <= 1:
return False
if num <= 3:
return True
if num % 2 == 0 or num % 3 == 0:
return False
i = 5
while i * i <= num:
if num % i == 0 or num % (i + 2) == 0:
return False
i += 6
return True

def check_binbon(n):
# Chuyển số n thành chuỗi để dễ dàng thao tác với các chữ số
n_str = str(n)

# Tính tổng các chữ số để tìm a
a = sum(int(digit) for digit in n_str)

# Tìm chữ số lớn nhất
max_digit = max(n_str)

# Tạo số k từ a và chữ số lớn nhất
k = int(f"{a}{max_digit}")

# Kiểm tra k có phải là số nguyên tố không
if is_prime(k):
return "YES"
else:
return "NO"

# Đọc số lượng test case
t = int(input())
results = []

for _ in range(t):
n = input().strip()
results.append(check_binbon(n))

# In kết quả
for result in results:
print(result)
```

### Giải thích:
1. Hàm `is_prime(num)` kiểm tra xem một số có phải là số nguyên tố hay không.
2. Hàm `check_binbon(n)` thực hiện các bước nêu trên để xác định xem `n` có phải là số "binbon" không.
3. Bỏ qua bước nhập không cần thiết khi `n` quá lớn (lên tới \(10^{1000}\)) bằng cách đọc nó như một chuỗi.
4. Chương trình đọc tất cả các test case và lưu kết quả, sau đó in ra từng kết quả.

Với mã Python này, bạn có thể kiểm tra bất kỳ số nguyên dương nào được đưa vào.
0
0
Nguyệt
31/07 21:09:31
+5đ tặng

++ Tính tổng các chữ số của n rồi ghép với chữ số lớn nhất của n, kiểm tra có phải số nguyên tố không.

++ Code:

#include <iostream>
#include <algorithm>
using namespace std;
int maxint(int n)
{
    if (n) return max(n, maxint(n/10));
    return 0;
}
int sumint(int n)
{
    if (n) return n + maxint(n/10);
    return 0;
}
bool check_prime(int n)
{
    if (n<2) return false;
    for (int i=2; i*i<=n; i++)
        if(n%i==0) return false;
    return true;
}
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        if (check_prime(sumint(n)*10+maxint(n))) cout << "YES";
        else cout << "NO";
        cout << endl;
    }
}

++ Chạy code: Ảnh

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập
1
0
Altrøx
31/07 21:09:53
+4đ tặng

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×