У меня проблема с работой массива JS gcd + - PullRequest
0 голосов
/ 22 сентября 2018

Привет всем, у меня проблема с заданием.Вот тело этой задачи:

Я работал над математической задачей и не смог ее решить :( Пожалуйста, помогите мне реализовать «простой» счетчик.

function count(s, pairs) {
  return 0; // number
}

В качестве первого аргумента вы будете использовать битовую маску в строке s (может содержать только 1 или 0.) В качестве второго аргумента вы будете использовать массив пар (массив, который содержит много массивов с длиной, равной 2). Каждая пара [q] [0]! == пары [w] [0] и каждая пара [h] [0] является простой.

Давайте определим число N

N = (pairs[0][0] ** pairs[0][1]) *
    (pairs[1][0] ** pairs[1][1]) *
    (pairs[2][0] ** pairs[2][1]) * /*
    ..... */ *
    (pairs[pairs.length - 1][0] ** pairs[pairs.length - 1][1])

Ваша задача - рассчитать, каксуществует много таких целых чисел k (0 <= k <= N), которые следуют следующему условию: наибольший общий делитель (k + j и N) равен 1, если s [j] === 1 И наибольший общий делитель (k+ j и N) НЕ равно 1, если s [j] === 0. </p>

Пожалуйста, верните НЕ действительное число, а число, которое является ответом мод 1000000007.

// ... your solution
  // answer - task solution
  const result = answer % 1000000007;
  return result;

Вот мой код, но он не может пройти тестовые случаи:

    module.exports = function count(s, pairs) {
      let result = 0;
      let N = 1;
      s = s.split('');
      const gcd = (x, y) => {
        x = Math.abs(x);
        y = Math.abs(y);
        while(y) {
          var t = y;
          y = x % y;
          x = t;
        }
        return x;
      }

      for (let i = 0; i < pairs.length; i++){
        N *= (pairs[i][0] ** pairs[i][1]);
      }

      for (let k = 0; k <= N; k++){
        for (let j = 0; j < s.length; j++){
          if(s[j] == 1 && gcd(k + j, N) === 1){
            result++;
          } else if(s[j] == 0 && gcd(k + j, N) !== 1){
            result++;
          }
        }
      }

      return result % 1000000007;
    }
...