avatar
level icon
ff ff

23/03/2025

Bài 2. (4,0 điểm) ĐẾM SỐ NGUYÊN TỐ Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có 2 ước là 1 và chính nó. Cho dãy n số nguyên dương a1, a2,…, an , em hãy đếm xem trong dãy có bao nhiêu số nguyên tố đôi...

ADS
thumb up 0
thumb down
Trả lời câu hỏi của ff ff

Làm sao để có câu trả lời hay nhất?

  • Luôn có GIẢI THÍCH các bước giải
  • Không copy câu trả lời của Timi
  • Không sao chép trên mạng
  • Không spam câu trả lời để nhận điểm
  • Spam sẽ bị khóa tài khoản
ADS
CÂU TRẢ LỜI
avatar
Timi

23/03/2025

Trợ lý học tập AI - Câu trả lời này chỉ mang tính tham khảo
Dưới đây là hướng dẫn giải bài tập 2 và bài tập 4 bằng ngôn ngữ lập trình C++. ### Bài 2: Đếm số nguyên tố Để giải bài này, bạn cần thực hiện các bước sau: 1. Đọc số lượng số nguyên dương `n` và dãy số từ tệp `BAI2.INP`. 2. Sử dụng một hàm kiểm tra số nguyên tố. 3. Sử dụng một tập hợp (set) để lưu trữ các số nguyên tố khác nhau. 4. Ghi kết quả ra tệp `BAI2.OUT`. Dưới đây là mã C++ cho bài 2: ```cpp #include <iostream> #include <fstream> #include #include <cmath> bool isPrime(int num) { if (num < 2) return false; for (int i = 2; i <= sqrt(num); i++) { if (num % i == 0) return false; } return true; } int main() { std::ifstream infile("BAI2.INP"); std::ofstream outfile("BAI2.OUT"); int n; infile >> n; std::set primes; for (int i = 0; i < n; i++) { int a; infile >> a; if (isPrime(a)) { primes.insert(a); } } outfile << primes.size() << std::endl; infile.close(); outfile.close(); return 0; } ``` ### Bài 4: Biến đổi dãy Để giải bài này, bạn cần thực hiện các bước sau: 1. Đọc số lượng phần tử `N` và giá trị tăng thêm `X` từ tệp `BAI4.INP`. 2. Tìm giá trị lớn nhất trong dãy số. 3. Tính số thao tác cần thiết để biến đổi tất cả các phần tử về giá trị lớn nhất. 4. Kiểm tra xem có thể biến đổi được hay không. 5. Ghi kết quả ra tệp `BAI4.OUT`. Dưới đây là mã C++ cho bài 4: ```cpp #include <iostream> #include <fstream> #include int main() { std::ifstream infile("BAI4.INP"); std::ofstream outfile("BAI4.OUT"); int N, X; infile >> N >> X; std::vector A(N); int maxVal = 0; for (int i = 0; i < N; i++) { infile >> A[i]; if (A[i] > maxVal) { maxVal = A[i]; } } int totalOperations = 0; for (int i = 0; i < N; i++) { int diff = maxVal - A[i]; if (diff % X != 0) { outfile << -1 << std::endl; infile.close(); outfile.close(); return 0; } totalOperations += diff / X; } outfile << totalOperations << std::endl; infile.close(); outfile.close(); return 0; } ``` ### Giải thích mã: - **Bài 2**: Sử dụng hàm `isPrime` để kiểm tra số nguyên tố và lưu trữ các số nguyên tố vào một `set` để đảm bảo tính duy nhất. - **Bài 4**: Tìm giá trị lớn nhất trong dãy và tính số thao tác cần thiết để biến đổi các phần tử về giá trị đó. Nếu không thể biến đổi, in ra -1. Bạn có thể biên dịch và chạy các đoạn mã trên để kiểm tra kết quả.
Hãy giúp mọi người biết câu trả lời này thế nào?
0/5 (0 đánh giá)
thumb up 0
thumb down
0 bình luận
Bình luận
avatar
level icon
Lynn Lynnhg1

23/03/2025

Bài 2. (4,0 điểm) ĐẾM SỐ NGUYÊN TỐ

Yêu cầu:

  • Đếm số lượng số nguyên tố đôi một khác nhau trong dãy.

Thuật toán giải Bài 2:

  1. Đọc vào n và dãy a1, a2, ..., an.
  2. Sử dụng sàng Eratosthenes để đánh dấu số nguyên tố tới 10^7.
  3. Duyệt qua từng số ai:
    • Nếu là số nguyên tố, thêm vào tập hợp set_prime để loại trùng.
  4. In ra kích thước của set_prime.

Code Python cho Bài 2:

def sieve(limit):
    prime = [True] * (limit + 1)
    prime[0] = prime[1] = False
    for i in range(2, int(limit ** 0.5) + 1):
        if prime[i]:
            for j in range(i * i, limit + 1, i):
                prime[j] = False
    return prime

# Đọc file input
with open('BAI2.INP', 'r') as f:
    n = int(f.readline())
    arr = list(map(int, f.readline().split()))

# Sàng nguyên tố
is_prime = sieve(10**7)

# Tập hợp chứa các số nguyên tố duy nhất
prime_set = set()

for num in arr:
    if is_prime[num]:
        prime_set.add(num)

# Ghi file output
with open('BAI2.OUT', 'w') as f:
    f.write(str(len(prime_set)))

Giải thích ví dụ:

Ví dụ 1:

Input:
5
1 3 25 19 8

Các số nguyên tố là: 3, 19
=> Có 2 số nguyên tố khác nhau.

Output: 2

Bài 4. (2,0 điểm) BIẾN ĐỔI DÃY

Yêu cầu:

  • Biến đổi tất cả các phần tử trong dãy thành bằng nhau bằng cách tăng thêm X đơn vị.
  • Nếu không thể, in ra -1.

Thuật toán giải Bài 4:

  1. Đọc vào N, X và dãy A.
  2. Tìm giá trị lớn nhất maxA trong dãy.
  3. Với mỗi phần tử ai:
    • Kiểm tra (maxA - ai) % X == 0.
      Nếu không chia hết, thì không thể biến đổi → in -1.
  4. Tính tổng số thao tác cần làm:
    sum((maxA - ai) // X) với mọi ai.
  5. In ra tổng số thao tác.

Code Python cho Bài 4:

# Đọc file input
with open('BAI4.INP', 'r') as f:
    N, X = map(int, f.readline().split())
    A = list(map(int, f.readline().split()))

maxA = max(A)
count = 0
possible = True

for ai in A:
    if (maxA - ai) % X != 0:
        possible = False
        break
    count += (maxA - ai) // X

# Ghi file output
with open('BAI4.OUT', 'w') as f:
    if possible:
        f.write(str(count))
    else:
        f.write('-1')

Giải thích ví dụ:

Ví dụ 1:

Input:
5 2
5 1 3 3 5

- maxA = 5
- Các chênh lệch: 0, 4, 2, 2, 0
- Kiểm tra chia hết X=2 → ok
- Tổng số bước: 0 + 2 + 1 + 1 + 0 = 4

Output: 4

Ví dụ 2:

Input:
2 100
1 10

- maxA = 10
- (10 - 1) = 9, 9 % 100 != 0 → không thể biến đổi

Output: -1

 

 

Hãy giúp mọi người biết câu trả lời này thế nào?
0/5 (0 đánh giá)
thumb up 0
thumb down
0 bình luận
Bình luận
ADS

Nếu bạn muốn hỏi bài tập

Các câu hỏi của bạn luôn được giải đáp dưới 10 phút

Ảnh ads

CÂU HỎI LIÊN QUAN

logo footer
FQA.vn Nền tảng kết nối cộng đồng hỗ trợ giải bài tập học sinh trong khối K12. Sản phẩm được phát triển bởi CÔNG TY TNHH CÔNG NGHỆ GIA ĐÌNH (FTECH CO., LTD)
Điện thoại: 1900636019 Email: info@fqa.vn
Location Địa chỉ: Số 21 Ngõ Giếng, Phố Đông Các, Phường Ô Chợ Dừa, Quận Đống Đa, Thành phố Hà Nội, Việt Nam.
Tải ứng dụng FQA
app store ch play
Người chịu trách nhiệm quản lý nội dung: Nguyễn Tuấn Quang Giấy phép thiết lập MXH số 07/GP-BTTTT do Bộ Thông tin và Truyền thông cấp ngày 05/01/2024
Copyright © 2023 fqa.vn All Rights Reserved
gift-box
survey
survey
Đặt câu hỏi