From 5460d2f593b40ed56856c89641253a809621fc46 Mon Sep 17 00:00:00 2001 From: Piotr Idzik Date: Fri, 9 Feb 2024 20:50:32 +0000 Subject: [PATCH] fix: handle squares properly in `isSquareFree` --- maths/is_square_free.ts | 2 +- maths/test/is_square_free.test.ts | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/maths/is_square_free.ts b/maths/is_square_free.ts index 0e55ab7f..79958a7a 100644 --- a/maths/is_square_free.ts +++ b/maths/is_square_free.ts @@ -14,7 +14,7 @@ export const isSquareFree = (n: number): boolean => { if (n % 2 === 0) n = n / 2; if (n % 2 === 0) return false; - for (let i: number = 3; i < Math.sqrt(n); i = i + 2) { + for (let i: number = 3; i <= Math.sqrt(n); i = i + 2) { if (n % i === 0) { n = n / i; if (n % i === 0) return false; diff --git a/maths/test/is_square_free.test.ts b/maths/test/is_square_free.test.ts index bbb16991..c2eeb99d 100644 --- a/maths/test/is_square_free.test.ts +++ b/maths/test/is_square_free.test.ts @@ -1,11 +1,14 @@ import { isSquareFree } from '../is_square_free'; describe('isSquareFree', () => { - test('should return correct boolean value', () => { - expect(isSquareFree(1)).toBe(true); - expect(isSquareFree(10)).toBe(true); - expect(isSquareFree(20)).toBe(false); - expect(isSquareFree(26)).toBe(true); - expect(isSquareFree(48)).toBe(false); + test.each([1, 2, 3, 5, 7, 10, 26, 2*3, 3*5*7, 11*13*17*19])( + "%i is square free", + (input) => { + expect(isSquareFree(input)).toBe(true); }); -}); \ No newline at end of file + test.each([20, 48, 2*7*7, 2*3*3, 5*5*7, 2*3*13*13*17, 4*4*4, 2*2, 3*3, 5*5, 100, 0])( + "%i is not square free", + (input) => { + expect(isSquareFree(input)).toBe(false); + }); +});