Hướng dẫn bài COPRIME - Nguyên tố cùng nhau

Trùm CUỐI 2020-10-21 18:29:03 2021-10-18 1:39:27

Link đến bài COPRIME - Nguyên tố cùng nhau

Trước hết cần chú ý:

  • Nếu tập S có những số trùng nhau thì ta chỉ giữ lại một trong số đó;
  • Nếu tập S a\vdots b thì ta chỉ cần giữ lại b ; Từ đó có thể thấy nếu các phần tử của tập S không vượt quá X thì tập S có không quá X phần tử.

Subtask 1:

Với tập S không quá n \le 20 phần tử ta có thể xét tất cả các khả năng chọn một tập con của S (có 2^n cách chọn)

Subtask 2:

Với tập S có không quá n=100 phần tử và các phần tử \le 100 .

Trước hết ta có nhận xét:

  • Nếu a\in S a có ước nguyên tố >50 thì a là số nguyên tố, do đó ta có thể lấy được số đó (và loại khỏi tập S ). Từ đó chỉ cần xét tập S gồm các số có ước nguyên tố thuộc tập \{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47\} .

Thuật toán QHĐ trạng thái:

  • Ta đánh số thứ tự các số nguyên tố từ 0 đến 14 (có 15 số nguyên tố tất cả theo danh sách trên)
  • Gọi f[i][mask] là số phần tử nhiều nhất của tập con S' của S khi xét đến phần tử thứ i và chỉ lấy các số có ước nguyên tố là các chỉ số bit 1 trong biểu diễn nhị phân của mask . Ví dụ f[3][9] là số phần tử nhiều nhất của tập con S' khi xét đến phần tử thứ 3 của S và chỉ lấy các số có ước nguyên tố là 2 7 (do 9 có biểu diễn nhị phân là 1001 ) (phần còn lại là phần của các bạn :) )

Subtask 3: Hãy phát triển ý tưởng của Subtask 2