Paste Search Dynamic
Recent pastes
addDivisors
  1. function gcd(a, b){
  2.   return b ? gcd(b, a % b) : a;
  3. }
  4.  
  5.  
  6. function getQ(X, j){
  7.   return X / gcd(X, j);
  8. }
  9.  
  10.  
  11. function addDivisors(n, map){
  12.   let m = 1;
  13.   while (m*m <= n){
  14.     if (n % m === 0){
  15.       map[m] = -~map[m];
  16.       const l = n / m;
  17.       if (l != m)
  18.         map[l] = -~map[l];
  19.     }
  20.     m += 1;
  21.   }
  22. }
  23.  
  24.  
  25. function f(A, X){
  26.   const hash = {};
  27.   let ans = 0;
  28.   for (let j=1; j<A.length; j++){
  29.     if (A[j] == A[0])
  30.       ans += 1;
  31.     if (hash.hasOwnProperty(A[j])){
  32.       const q = getQ(X, j);
  33.       ans += hash[A[j]][q] || 0;
  34.     } else {
  35.       hash[A[j]] = {};
  36.     }
  37.     addDivisors(j, hash[A[j]]);
  38.   }
  39.   return ans;
  40. }
  41.  
  42. print(f([0,3,3,2,3,2,3,3], 3))
Parsed in 0.003 seconds