Привет всем, у меня проблема с заданием.Вот тело этой задачи:
Я работал над математической задачей и не смог ее решить :( Пожалуйста, помогите мне реализовать «простой» счетчик.
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;
}