Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const
- maxn = 100000;
- var
- ans, n: int64;
- i, j, k, maxi, t: longint;
- a: array[1..100] of longint;
- b: array[1..100, 1..maxn] of int64;
- function get_answer(i: longint; n: int64): int64;
- var ans: int64;
- begin
- if n = 0 then begin
- get_answer := 0;
- exit;
- end;
- if i > k then begin
- get_answer := n;
- exit;
- end;
- if (n <= maxn) and (b[i, n] <> -1) then begin
- get_answer := b[i, n];
- exit;
- end;
- ans := get_answer(i + 1, n) - get_answer(i + 1, n div a[i]);
- if (n <= maxn) then b[i, n] := ans;
- get_answer := ans;
- end;
- begin
- read(n, k);
- for i := 1 to k do read(a[i]);
- // sort in descending order
- for j := 1 to k - 1 do begin
- maxi := j;
- for i := j + 1 to k do begin
- if a[i] > a[maxi] then maxi := i;
- end;
- t := a[j]; a[j] := a[maxi]; a[maxi] := t;
- end;
- for i := 1 to k do
- for j := 1 to maxn do
- b[i, j] := -1;
- writeln(get_answer(1, n));
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement