Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. 1. DP over Divisors
  2. /**
  3. given x;
  4. di=divisors of x;
  5. n=di.size();
  6. for(int i=1;i<=n;i++) ans[i]=rnd();
  7. ans[i] should be=sum of ans[k] for all k such that di[i] is a divisor of k
  8. Brute force DP= O((number of divisors of x)^2)
  9. We can optimize it using prime factors of x.
  10. Target complexity=O((number of divisors of x)*(unique prime factors of x))
  11. */
  12. int32_t main()
  13. {
  14. di=divisors of x
  15. d=di.size();
  16. for(int i=0; i<d; i++) id[di[i]]=i;
  17. for(int i=0;i<n;i++) ans[i]=rnd()%10;///initial answer for i-th divisor
  18. P=unique prime factors of x
  19. for(auto k:P)
  20. {
  21. for(int i=d-1; i>=0; i--)
  22. {
  23. if(di[i]%k==0)
  24. {
  25. ans[id[di[i]/k]]+=ans[i];
  26. //assert(id[di[i]/x.F]<i);
  27. }
  28. }
  29. }
  30. return 0;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement