Функция нахождения дружественных чисел в заданном интервале.
Ребят, привет! Решаю задачи по написанию функций, но со следующей задачей зашёл в тупик.
Сделайте функцию getFreindly, которая будет находить пары дружественных чисел в заданном промежутке и возвращать их в виде двухмерного массива вида [ [220, 284], [1184, 1210], [2620, 2924] ]. С помощью созданной функции найдите все пары дружественных чисел на промежутке от 1 до 9000. Вот моё решение:
alert(Freindly(1, 9000));
function Freindly(num1, num2){
let arr=[[]];
let sum1 = getSum(getOwnDivisors(num1));
let sum2 = getSum(getOwnDivisors(num2));
for(let i=0; i<=2; i++){
arr.push([i]);
for(let j=num1; j<num2; j++){
if(sum1==num2&&sum2==num1){
arr.push([i][j]);
}
}
return arr;
}
}
function getOwnDivisors(num){
let result=[];
for(let i=1; i<9000; i++){
if (9000 % i==0){
result.push(i);
}
} return result;
}
function getSum(arr){
String(arr).split('');
let sum=0;
for(elem of arr){
sum+= Number(elem);
}
return sum;
}
Вот чувствую, что я что-то не так делаю, намудрил может быть лишнего, потому и в тупик зашёл. Что в моём решении не так? Подскажите правильное решение. |
Gm5,
<script>
function Freindly(min, max) {
const obj = {};
for (let i = min; i <= max; i++) {
obj[i] = getSum(i);
}
return Object.entries(obj)
.filter(([a, b], i) => obj[b] && obj[b] == a && a != b )
.filter((_, i) => i % 2 === 0)
.map(([a, b]) => [+a, b]);
}
function getSum(num) {
let end = num/2,
sum = 0;
for (let i = 1; i <= end; i++) {
if (num % i === 0) sum += i;
}
return sum;
}
let x = Freindly(1, 9000);
document.write(JSON.stringify(x))
</script>
|
Gm5,
или так ...
<script>
function Freindly(min, max) {
const arr = [];
let e;
for (let i = min; i <= max; i++) {
let a = getSum(i), b = getSum(a);
if(i === b && i != a && (e = !e)) arr.push([i, a])
}
return arr
}
function getSum(num) {
let end = num/2,
sum = 0;
for (let i = 1; i <= end; i++) {
if (num % i === 0) sum += i;
}
return sum;
}
let x = Freindly(1, 9000);
document.write(JSON.stringify(x))
</script>
|
рони,
СПАСИБО!:thanks: |
рони,
прокомментируйте пожалуйста в этой строке if(i === b && i != a && (e = !e)) arr.push([i, a]) для чего нужно (e = !e). Я понял ,что это помогает не дублировать дружественные числа в массиве с обратной стороны, но как это работает??? ))) |
Цитата:
|
| Часовой пояс GMT +3, время: 08:10. |