Trang chủ Tin Học Lớp 8 Bài 2. (3,0 điểm) Dãy số đặc biệt Dãy số...

Bài 2. (3,0 điểm) Dãy số đặc biệt Dãy số A1, A2.... An được gọi là dãy số đặc biệt nếu nó thoả mãn các điều kiện: • Là dãy số giảm dần; • Với mỗi a thì ai

Câu hỏi :

c++++++++++++++++++++++++++++++

image

Lời giải 1 :

Ý tưởng

Ta cần tìm cách để thêm nhiều số nhất vào mảng ans kết quả của chúng ta.

Đầu tiên, ans = {N}

Dễ thấy, ta cần thêm tất cả các số nguyên tố từ 2 đến N (do các số bé hơn 2 ko thể nguyên tố) vào dãy ans. Do các số này đều là số nguyên tố nên dãy số ans sẽ luôn thỏa mãn.

Vậy còn "với mỗi a[i] thì a[i] là ước của 1 trong các số từ a[1] -> a[i-1]" thì sao? Ta thấy, các số nguyên tố luôn lớn hơn 2 và chỉ có 1 ước khác nó là 1. Vậy ta thêm 1 vào dãy ans. Ta không thể thêm bất kỳ số nào là ước khác của các số nguyên tố được thêm vào trước đó. Điều đó dẫn tới các số thêm vào chỉ còn có thể là ước của N.

Vậy tóm lại, ta cần thêm tất cả các SNT từ 1->N và tất cả các ước của N, sau đó xóa đi các phần tử bị lặp lại (sử dụng set) và sắp xếp lại dãy ans. Như vậy sẽ ra được kết quả.

Code (C++)

#include <bits/stdc++.h>
using namespace std;

int isPrime(int n){
    // Khong can if(n < 2) return false do ta se khong xet toi n < 2
    if(n < 4) return true;
    for(int i=2;i*i<=n;i++)
        if(n % i == 0) return false;
    return true;
}

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    freopen("DAYSO.IN","r",stdin);
    freopen("DAYSO.OUT","w",stdout);

    int n; cin >> n;
    set<int> ans = {n,1}; // luon co 1 trong day ans
    // Tim tat ca cac SNT tu 2->n-1 (khong can n do n da co trong ans)
    for(int i=2;i<n;i++)
        if(isPrime(i)) ans.insert(i);
    // Tim tat ca cac uoc cua n
    for(int i=2;i*i<=n;i++)
    if(n % i == 0) {ans.insert(i); ans.insert(n/i);}
    // Sap xep lai ans
    vector<int> out(ans.begin(),ans.end());
    sort(out.begin(),out.end(),greater<int>());
    // In ra kq
    for(int i: out) cout << i << ' ';
    return 0;
}

Thảo luận

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 8

Lớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần, sang năm lại là năm cuối cấp áp lực lớn dần nhưng các em vẫn phải chú ý sức khỏe nhé!

Nguồn : ADMIN :))

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK