Advertisement
Guest User

dalex

a guest
Jul 2nd, 2011
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 0.90 KB | None | 0 0
  1. const
  2.     maxn = 100000;
  3.  
  4. var
  5.     ans, n: int64;
  6.     i, j, k, maxi, t: longint;
  7.     a: array[1..100] of longint;
  8.     b: array[1..100, 1..maxn] of int64;
  9.  
  10. function get_answer(i: longint; n: int64): int64;
  11. var ans: int64;
  12. begin
  13.     if n = 0 then begin
  14.         get_answer := 0;
  15.         exit;
  16.     end;
  17.     if i > k then begin
  18.         get_answer := n;
  19.         exit;
  20.     end;
  21.     if (n <= maxn) and (b[i, n] <> -1) then begin
  22.         get_answer := b[i, n];
  23.         exit;
  24.     end;
  25.     ans := get_answer(i + 1, n) - get_answer(i + 1, n div a[i]);
  26.     if (n <= maxn) then b[i, n] := ans;
  27.     get_answer := ans;
  28. end;
  29.  
  30. begin
  31.     read(n, k);
  32.     for i := 1 to k do read(a[i]);
  33.  
  34.     // sort in descending order
  35.     for j := 1 to k - 1 do begin
  36.         maxi := j;
  37.         for i := j + 1 to k do begin
  38.             if a[i] > a[maxi] then maxi := i;
  39.         end;
  40.         t := a[j]; a[j] := a[maxi]; a[maxi] := t;
  41.     end;
  42.  
  43.     for i := 1 to k do
  44.         for j := 1 to maxn do
  45.             b[i, j] := -1;
  46.  
  47.     writeln(get_answer(1, n));
  48. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement