aboutsummaryrefslogtreecommitdiff
path: root/c05
diff options
context:
space:
mode:
authorCabergs Charles <cacharle@e-r6-p7.s19.be>2019-07-09 10:23:25 +0200
committerCabergs Charles <cacharle@e-r6-p7.s19.be>2019-07-09 10:23:25 +0200
commit90076f97a1de6b60968e98d6c7a8b520ebda3c8e (patch)
tree6c60a0fde7b2d8bc984845f6a412171df977e1dc /c05
parent803d5e42138e1f0f69f6d8953aea5cd23f5b72ee (diff)
downloadpiscine-90076f97a1de6b60968e98d6c7a8b520ebda3c8e.tar.gz
piscine-90076f97a1de6b60968e98d6c7a8b520ebda3c8e.tar.bz2
piscine-90076f97a1de6b60968e98d6c7a8b520ebda3c8e.zip
c07/c08 start, c05 faster, better, stronger
Diffstat (limited to 'c05')
-rw-r--r--c05/ex00/ft_iterative_factorial.c3
-rw-r--r--c05/ex03/ft_recursive_power.c11
-rw-r--r--c05/ex05/ft_sqrt.c30
-rw-r--r--c05/ex06/ft_is_prime.c16
-rw-r--r--c05/ex07/ft_find_next_prime.c16
-rw-r--r--c05/main.c24
6 files changed, 65 insertions, 35 deletions
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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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));*/
}