Advertisement
Guest User

NONAME PASCAL

a guest
Oct 22nd, 2014
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. type long=int64;
  2. int=longint;
  3. pf=record e, k: long; end;
  4.  
  5. var p: array[1..1000000] of pf;
  6. n, m, k: long;
  7. l: int;
  8.  
  9. procedure primefactor(m: long);
  10. var d, lim: long;
  11. begin
  12. l:=0;
  13. d:=2;
  14.  
  15. if m mod d=0 then begin
  16. l:=l+1;
  17. p[l].e:=d;
  18. p[l].k:=0;
  19. while m mod d=0 do begin
  20. m:=m div d;
  21. p[l].k:=p[l].k+1;
  22. end;
  23. end;
  24.  
  25. lim:=trunc(sqrt(m));
  26. d:=3;
  27.  
  28. while d<=lim do begin
  29. if m mod d=0 then begin
  30. l:=l+1;
  31. p[l].e:=d;
  32. p[l].k:=0;
  33. while m mod d=0 do begin
  34. m:=m div d;
  35. p[l].k:=p[l].k+1;
  36. end;
  37. lim:=trunc(sqrt(m));
  38. end;
  39.  
  40. d:=d+2;
  41. end;
  42.  
  43. if m<>1 then begin
  44. l:=l+1;
  45. p[l].e:=m;
  46. p[l].k:=1;
  47. end;
  48. end;
  49.  
  50. function calc(n, d: long):long;
  51. var x: long;
  52. begin
  53. calc:=0;
  54. x:=d;
  55. while d<=n do begin
  56. calc:=calc+n div d;
  57. d:=d*x;
  58. end;
  59. end;
  60.  
  61. procedure solve;
  62. var x: long;
  63. i: int;
  64. begin
  65. k:=2100000000;
  66. for i:=1 to l do begin
  67. x:=calc(n, p[i].e) div p[i].k;
  68. if k>x then k:=x;
  69. end;
  70. end;
  71.  
  72. begin
  73. readln(n, m);
  74. primefactor(m);
  75. solve;
  76. writeln(k);
  77. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement