我的JS gcd +数组工作有问题

时间:2018-09-22 19:10:29

标签: javascript arrays node.js greatest-common-divisor

大家好,我在执行任务时遇到了问题。这是此任务的正文:

我正在从事数学任务,但无法解决问题:(请帮助我实现“简单”计数器。

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

作为第一个参数,您将在字符串s中使用位掩码(只能包含1或0)。作为第二个参数,您将使用成对的数组(array,其中包含许多长度等于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),其遵循下一个条件:如果s [j] =,(k + j和N)的最大公约数为1。 == 1并且,如果s [j] === 0,则(k + j和N)的最大公约数不是1。

请返回的不是实际数字,而是答案为mod 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;
    }

0 个答案:

没有答案