From 90076f97a1de6b60968e98d6c7a8b520ebda3c8e Mon Sep 17 00:00:00 2001 From: Cabergs Charles Date: Tue, 9 Jul 2019 10:23:25 +0200 Subject: c07/c08 start, c05 faster, better, stronger --- c05/ex00/ft_iterative_factorial.c | 3 +-- c05/ex03/ft_recursive_power.c | 11 +++++------ c05/ex05/ft_sqrt.c | 30 +++++++++++++++++++----------- c05/ex06/ft_is_prime.c | 16 ++++++++++------ c05/ex07/ft_find_next_prime.c | 16 ++++++++++------ c05/main.c | 24 ++++++++++++++++++++---- 6 files changed, 65 insertions(+), 35 deletions(-) (limited to 'c05') diff --git a/c05/ex00/ft_iterative_factorial.c b/c05/ex00/ft_iterative_factorial.c index 3773b9d..c8f4a35 100644 --- a/c05/ex00/ft_iterative_factorial.c +++ b/c05/ex00/ft_iterative_factorial.c @@ -6,14 +6,13 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/06 16:48:21 by cacharle #+# #+# */ -/* Updated: 2019/07/08 12:06:59 by cacharle ### ########.fr */ +/* Updated: 2019/07/08 17:22:07 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ int ft_iterative_factorial(int nb) { int acc; - int i; if (nb < 0) return (0); diff --git a/c05/ex03/ft_recursive_power.c b/c05/ex03/ft_recursive_power.c index 8339768..7c710d6 100644 --- a/c05/ex03/ft_recursive_power.c +++ b/c05/ex03/ft_recursive_power.c @@ -6,17 +6,16 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/06 17:39:43 by cacharle #+# #+# */ -/* Updated: 2019/07/08 12:07:33 by cacharle ### ########.fr */ +/* Updated: 2019/07/08 13:44:24 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ int ft_recursive_power(int nb, int power) { - if (power < 0) - return (0); if (power == 0) return (1); - if (power == 1) - return (nb); - return (nb * ft_recursive_power(nb, power - 1)); + if (power > 0) + return (nb * ft_recursive_power(nb, power - 1)); + else + return (ft_recursive_power(nb, power + 1) / nb); } diff --git a/c05/ex05/ft_sqrt.c b/c05/ex05/ft_sqrt.c index a72af2d..aef9630 100644 --- a/c05/ex05/ft_sqrt.c +++ b/c05/ex05/ft_sqrt.c @@ -6,20 +6,28 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/06 20:06:48 by cacharle #+# #+# */ -/* Updated: 2019/07/08 12:08:36 by cacharle ### ########.fr */ +/* Updated: 2019/07/09 06:38:18 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ -int ft_sqrt(int nb) +int bin_search_sqrt(long unsigned int nb, unsigned int low, unsigned int up) { - int i; + long unsigned int mid; + + mid = low + ((up - low) / 2); + if (mid * mid == nb) + return (mid); + if (low > up) + return (0); + if (mid * mid < nb) + return (bin_search_sqrt(nb, mid + 1, up)); + else + return (bin_search_sqrt(nb, low, mid - 1)); +} - i = 0; - while (i <= nb) - { - if (i * i == nb) - return (i); - i++; - } - return (0); +int ft_sqrt(int nb) +{ + if (nb < 0) + return (0); + return (bin_search_sqrt(nb, 0, nb)); } diff --git a/c05/ex06/ft_is_prime.c b/c05/ex06/ft_is_prime.c index dc06fa5..73ca59b 100644 --- a/c05/ex06/ft_is_prime.c +++ b/c05/ex06/ft_is_prime.c @@ -6,13 +6,14 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/06 20:17:59 by cacharle #+# #+# */ -/* Updated: 2019/07/08 12:08:46 by cacharle ### ########.fr */ +/* Updated: 2019/07/09 10:17:58 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ int ft_is_prime(int nb) { - int i; + long unsigned int i; + long unsigned int nbu; if (nb <= 1) return (0); @@ -20,12 +21,15 @@ int ft_is_prime(int nb) return (1); if (nb % 2 == 0 || nb % 3 == 0) return (0); - i = 5; - while (i * i <= nb) + i = 1; + nbu = nb; + while (i * i <= nbu) { - if (nb % i == 0 || nb % (i + 2) == 0) + if (nbu % (i * 6 - 1) == 0) return (0); - i += 6; + if (nbu % (i * 6 + 1) == 0) + return (0); + i += 1; } return (1); } diff --git a/c05/ex07/ft_find_next_prime.c b/c05/ex07/ft_find_next_prime.c index e17ca94..80227da 100644 --- a/c05/ex07/ft_find_next_prime.c +++ b/c05/ex07/ft_find_next_prime.c @@ -6,13 +6,14 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/07 07:50:11 by cacharle #+# #+# */ -/* Updated: 2019/07/08 12:09:16 by cacharle ### ########.fr */ +/* Updated: 2019/07/09 10:20:25 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ int is_prime(int nb) { - int i; + long unsigned int i; + long unsigned int nbu; if (nb <= 1) return (0); @@ -20,12 +21,15 @@ int is_prime(int nb) return (1); if (nb % 2 == 0 || nb % 3 == 0) return (0); - i = 5; - while (i * i <= nb) + i = 1; + nbu = nb; + while (i * i <= nbu) { - if (nb % i == 0 || nb % (i + 2) == 0) + if (nbu % (i * 6 - 1) == 0) return (0); - i += 6; + if (nbu % (i * 6 + 1) == 0) + return (0); + i += 1; } return (1); } diff --git a/c05/main.c b/c05/main.c index ca9a1c1..ac5a6e6 100644 --- a/c05/main.c +++ b/c05/main.c @@ -32,12 +32,15 @@ int main() printf("%d^%d = %d\n", 2, 2, ft_iterative_power(2, 4)); printf("%d^%d = %d\n", 3, 3, ft_iterative_power(3, 3)); printf("%d^%d = %d\n", 4, 5, ft_iterative_power(4, 5)); + printf("%d^%d = %d\n", -4, 5, ft_iterative_power(-4, 5)); printf("---------------------\n"); + printf("%d^%d = %d\n", 1, -9, ft_recursive_power(1, -9)); printf("%d^%d = %d\n", 2, 0, ft_recursive_power(2, 0)); printf("%d^%d = %d\n", 2, 2, ft_recursive_power(2, 4)); printf("%d^%d = %d\n", 3, 3, ft_recursive_power(3, 3)); printf("%d^%d = %d\n", 4, 5, ft_recursive_power(4, 5)); + printf("%d^%d = %d\n", -4, 5, ft_iterative_power(-4, 5)); printf("---------------------\n"); printf("F%d = %d\n", -1, ft_fibonacci(-1)); @@ -45,6 +48,8 @@ int main() printf("F%d = %d\n", 1, ft_fibonacci(1)); printf("F%d = %d\n", 2, ft_fibonacci(2)); printf("F%d = %d\n", 3, ft_fibonacci(3)); + printf("F%d = %d\n", 4, ft_fibonacci(4)); + printf("F%d = %d\n", 5, ft_fibonacci(5)); printf("F%d = %d\n", 8, ft_fibonacci(8)); printf("F%d = %d\n", 30, ft_fibonacci(30)); /*printf("F%d = %d\n", 41, ft_fibonacci(41));*/ @@ -53,8 +58,16 @@ int main() printf("sqrt(%d) = %d\n", -36, ft_sqrt(-36)); printf("sqrt(%d) = %d\n", 0, ft_sqrt(0)); printf("sqrt(%d) = %d\n", 4, ft_sqrt(4)); - printf("sqrt(%d) = %d\n", 9, ft_sqrt(4)); + printf("sqrt(%d) = %d\n", 7, ft_sqrt(7)); + printf("sqrt(%d) = %d\n", 9, ft_sqrt(9)); printf("sqrt(%d) = %d\n", 678, ft_sqrt(678 * 678)); + printf("sqrt(%d) = %d\n", 5555 * 5555, ft_sqrt(5555 * 5555)); + printf("sqrt(%d) = %d\n", 10000 * 10000, ft_sqrt(10000 * 10000)); + /*for (int i = 0; i < INT_MAX; i++)*/ + /*if (ft_sqrt(i))*/ + /*printf("sqrt(%d) = %d\n", i, ft_sqrt(i));*/ + + printf("---------------------\n"); printf("prime(%d) = %d\n", 3, ft_is_prime(3)); @@ -63,14 +76,17 @@ int main() printf("prime(%d) = %d\n", 21, ft_is_prime(21)); printf("prime(%d) = %d\n", 36, ft_is_prime(36)); printf("prime(%d) = %d\n", 2147483617, ft_is_prime(2147483617)); - /*printf("prime(%d) = %d\n", 2147483629, ft_is_prime(2147483629));*/ - /*for (int i = INT_MAX; i > INT_MAX - 100; i--)*/ + printf("prime(%d) = %d\n", 2147483629, ft_is_prime(2147483629)); + printf("prime(%d) = %d\n", 2147483647, ft_is_prime(2147483647)); + printf("prime(%d) = %d\n", 899, ft_is_prime(899)); + printf("prime(%d) = %d\n", 289, ft_is_prime(289)); + /*for (int i = INT_MAX; i > INT_MAX - 1000; i--)*/ /*printf("%d is %d\n", i, ft_is_prime(i));*/ printf("---------------------\n"); printf("nextp(%d) = %d\n", 21, ft_find_next_prime(21)); printf("nextp(%d) = %d\n", 23, ft_find_next_prime(23)); printf("nextp(%d) = %d\n", 2147483600, ft_find_next_prime(2147483600)); - /*for (int i = INT_MAX; i > INT_MAX - 100; i--)*/ + /*for (int i = INT_MAX; i > INT_MAX - 1000000; i--)*/ /*printf("%d is %d\n", i, ft_find_next_prime(i));*/ } -- cgit