mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-07 11:08:54 +08:00
Merge pull request #550 from sandyboypraper/master
Added EulersTotientFunction function to the Maths Folder
This commit is contained in:
28
Maths/EulersTotientFunction.js
Normal file
28
Maths/EulersTotientFunction.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
author sandyboypraper
|
||||||
|
|
||||||
|
Here is the EulerTotientFunction.
|
||||||
|
it is also represented by phi
|
||||||
|
|
||||||
|
so EulersTotientFunction(n) (or phi(n)) is the count of numbers in {1,2,3,....,n} that are relatively
|
||||||
|
prime to n, i.e., the numbers whose GCD (Greatest Common Divisor) with n is 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const gcdOfTwoNumbers = (x, y) => {
|
||||||
|
// x is smaller than y
|
||||||
|
// let gcd of x and y is gcdXY
|
||||||
|
// so it devides x and y completely
|
||||||
|
// so gcdXY should also devides y%x (y = gcdXY*a and x = gcdXY*b and y%x = y - x*k so y%x = gcdXY(a - b*k))
|
||||||
|
// and gcd(x,y) is equals to gcd(y%x , x)
|
||||||
|
return x === 0 ? y : gcdOfTwoNumbers(y % x, x)
|
||||||
|
}
|
||||||
|
|
||||||
|
const eulersTotientFunction = (n) => {
|
||||||
|
let countOfRelativelyPrimeNumbers = 1
|
||||||
|
for (let iterator = 2; iterator <= n; iterator++) {
|
||||||
|
if (gcdOfTwoNumbers(iterator, n) === 1) countOfRelativelyPrimeNumbers++
|
||||||
|
}
|
||||||
|
return countOfRelativelyPrimeNumbers
|
||||||
|
}
|
||||||
|
|
||||||
|
export { eulersTotientFunction }
|
11
Maths/test/EulersTotientFunction.test.js
Normal file
11
Maths/test/EulersTotientFunction.test.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { eulersTotientFunction } from '../EulersTotientFunction'
|
||||||
|
|
||||||
|
describe('eulersTotientFunction', () => {
|
||||||
|
it('is a function', () => {
|
||||||
|
expect(typeof eulersTotientFunction).toEqual('function')
|
||||||
|
})
|
||||||
|
it('should return the phi of a given number', () => {
|
||||||
|
const phiOfNumber = eulersTotientFunction(10)
|
||||||
|
expect(phiOfNumber).toBe(4)
|
||||||
|
})
|
||||||
|
})
|
2
package-lock.json
generated
2
package-lock.json
generated
@ -9625,4 +9625,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,4 +27,4 @@
|
|||||||
"jest": "^26.4.2",
|
"jest": "^26.4.2",
|
||||||
"standard": "^14.3.4"
|
"standard": "^14.3.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user