CSES - Prime Multiples | Bội số nguyên tố

Xem PDF



Tác giả:
Dạng bài
Điểm: 1700 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Bạn được cho \(k\) số nguyên tố phân biệt \(a_1, a_2, \ldots, a_k\) và một số nguyên \(n\).

Nhiệm vụ của bạn là tính toán có bao nhiêu trong \(n\) số nguyên dương đầu tiên chia hết cho ít nhất một trong các số nguyên tố đã cho.

Input

  • Dòng đầu vào đầu tiên có hai số nguyên \(n\)\(k\).
  • Dòng thứ hai có \(k\) số nguyên tố \(a_1, a_2, \ldots, a_k\).

Output

In một số nguyên: số lượng số nguyên trong trong khoảng \(1, 2, \ldots, n\) chia hết cho ít nhất một trong các số nguyên tố.

Constraints

  • \(1 \leq n \leq 10^{18}\)
  • \(1 \leq k \leq 20\)
  • \(2 \leq a_i \leq n\)

Example

Sample input

20 2
2 5

Sample output

12

Note

\(12\) số là \(2\), \(4\), \(5\), \(6\), \(8\), \(10\), \(12\), \(14\), \(15\), \(16\), \(18\), \(20\).


Bình luận


  • 0
    rock    7:59 p.m. 24 Tháng 10, 2024

    Var n,kq:Int64;
    k,i:Longint;
    a:Array[0..30] of Int64;
    t1:Int64;
    procedure sort(l,r: longint);
    var
    i,j: longint;
    x,y:Int64;
    begin
    i:=l;
    j:=r;
    x:=a[l+random(r-l+1)];
    repeat
    while a[i]<x do inc(i); while x\<a[j] do dec(j); if not(i>j) then begin y:=a[i]; a[i]:=a[j]; a[j]:=y; inc(i); j:=j-1; end; until i>j;
    if l<j then
    sort(l,j);
    if i<r then
    sort(i,r);
    end;

    Procedure backtracking(j,vt:Longint);
    Var i:Longint;
    Begin
    For i:=vt to k do
    Begin
    If t1>n div a[i] then exit;
    t1:=t1*a[i];
    If j mod 2=1 then kq:=kq+n div t1
    Else kq:=kq-n div t1;
    If i<k then backtracking(j+1,i+1);
    t1:=t1 div a[i];
    End;
    End;
    BEGIN
    Readln(n,k);
    randomize;
    kq:=0;
    t1:=1;
    For i:=1 to k do read(a[i]);
    sort(1,k);
    backtracking(1,1);
    Writeln(kq);
    readln
    END.
    (pascal)


    • 0
      HoangTung    8:48 a.m. 22 Tháng 9, 2024

      cs ai AC chx giúp tôi với


      • 1
        tienminhho509    12:34 p.m. 9 Tháng 9, 2024

        ai cho e xin code đc ko ạ


        • -4
          penistone    11:07 p.m. 13 Tháng 2, 2024
          Gợi ý

          Backtrack + math


          • 0
            NguyenLePhuc    6:42 p.m. 27 Tháng 11, 2023

            có cách làm nào không ạ, mình đã cày trâu bị memory


            • 1
              N7hoatt    9:25 p.m. 31 Tháng 8, 2023

              Bạn được cho \(k\) số nguyên tố phân biệt \(a_1, a_2,a_3,\dots,a_k\) và một số nguyên \(n\).

              Hãy đếm trong \(n\) số nguyên dương đầu tiên, có bao nhiêu số chia hết cho ít nhất một số trong các số nguyên tố được cho.

              Input

              • Dòng đầu tiên gồm hai số nguyên \(n\)\(k\).
              • Dòng thứ hai gồm \(k\) số nguyên tố \(a_1, a_2,a_3,\dots,a_k\).

              Output

              • In ra một số nguyên duy nhất: số lượng số trong khoảng \(1,2,\dots,n\) chia hết cho ít nhất một trong các số nguyên tố.

              Constraints

              • \(1 \leq n \leq 10^{18}\).
              • \(1 \leq k \leq 20\).
              • \(2 \leq a_i \leq n\).

              Example

              Test 1

              Input
              20 2
              2 5
              Output
              12
              Note

              Giải thích: \(12\) số bao gồm \(2,4,5,6,8,10,12,14,15,16,18,20\).


              • -4
                xthabao1    11:37 p.m. 12 Tháng 8, 2023

                chưa hiểu lắm

                1 phản hồi