Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. const int N = 5001;
  2. ll n, m, k;
  3. ll arr[N];
  4. unordered_set<ll> bb;
  5. vector<ll> primes;
  6. bool aprimes[33334];
  7. int main() {
  8. // freopen("input.txt", "r", stdin); freopen("output.txt","w",stdout);
  9. ios::sync_with_stdio(false); cin.tie(0);
  10. cin >> n >> m;
  11. REP(i,n) { cin >> arr[i]; }
  12. REP(i,m) { cin >> k; bb.insert(k); }
  13. ll maxp = 33334;
  14. REP(i,maxp) aprimes[i]=true;
  15. for (int i = 2; i < maxp; i++) {
  16. if (aprimes[i]) {
  17. primes.PB(i);
  18. for (int j = i * i; j < maxp; j+=i) {
  19. aprimes[j]=false;
  20. }
  21. }
  22. }
  23. dbgm(5);
  24. ll bestdiff = 0;
  25. ll tot = 0;
  26. ll d = arr[0];
  27. // dbg(primes);
  28. REP(i,n) {
  29. d = __gcd(d, arr[i]);
  30. ll currd = d;
  31. ll currdiff = 0;
  32. ll curr = arr[i];
  33. for (auto p : primes) {
  34. bool isbad = bb.count(p);
  35. while (curr%p==0) {
  36. curr/=p;
  37. if (isbad) tot--;
  38. else tot++;
  39. }
  40. while(currd%p==0) {
  41. currd/=p;
  42. if (isbad)currdiff++;
  43. else currdiff--;
  44. }
  45. }
  46. if (curr != 1) {
  47. if (bb.count(curr)) tot--;
  48. else tot++;
  49. }
  50. if (currd != 1) {
  51. if (bb.count(currd)) currdiff++;
  52. else currdiff--;
  53. }
  54. dbgm(i, d, currdiff);
  55. bestdiff=max(bestdiff, currdiff * (i+1));
  56. }
  57. dbgm(tot, bestdiff);
  58. cout << tot + bestdiff;
  59.  
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement