aboutsummaryrefslogtreecommitdiff
path: root/c05
diff options
context:
space:
mode:
Diffstat (limited to 'c05')
-rw-r--r--c05/ex06/ft_is_prime.c14
-rw-r--r--c05/ex07/ft_find_next_prime.c19
-rw-r--r--c05/ex08/ft_queens.c62
-rw-r--r--c05/main.c12
4 files changed, 83 insertions, 24 deletions
diff --git a/c05/ex06/ft_is_prime.c b/c05/ex06/ft_is_prime.c
index 3c83061..658fefb 100644
--- a/c05/ex06/ft_is_prime.c
+++ b/c05/ex06/ft_is_prime.c
@@ -13,7 +13,6 @@
int ft_is_prime(int nb)
{
long unsigned int i;
- long unsigned int nbu;
if (nb <= 1)
return (0);
@@ -21,15 +20,12 @@ int ft_is_prime(int nb)
return (1);
if (nb % 2 == 0 || nb % 3 == 0)
return (0);
- i = 1;
- nbu = nb;
- while (i * i <= nbu) // ne fonctionne pas de 7 a 41
+ i = 5;
+ while (i * i <= nb)
{
- if (nbu % (i * 6 - 1) == 0)
- return (0);
- if (nbu % (i * 6 + 1) == 0)
- return (0);
- i += 1;
+ if (nb % i == 0 || nb % (i + 2) == 0)
+ return (0);
+ i += 6;
}
return (1);
}
diff --git a/c05/ex07/ft_find_next_prime.c b/c05/ex07/ft_find_next_prime.c
index 80227da..d8650eb 100644
--- a/c05/ex07/ft_find_next_prime.c
+++ b/c05/ex07/ft_find_next_prime.c
@@ -10,10 +10,10 @@
/* */
/* ************************************************************************** */
-int is_prime(int nb)
+
+static int is_prime(int nb)
{
long unsigned int i;
- long unsigned int nbu;
if (nb <= 1)
return (0);
@@ -21,20 +21,17 @@ int is_prime(int nb)
return (1);
if (nb % 2 == 0 || nb % 3 == 0)
return (0);
- i = 1;
- nbu = nb;
- while (i * i <= nbu)
+ i = 5;
+ while (i * i <= nb)
{
- if (nbu % (i * 6 - 1) == 0)
- return (0);
- if (nbu % (i * 6 + 1) == 0)
- return (0);
- i += 1;
+ if (nb % i == 0 || nb % (i + 2) == 0)
+ return (0);
+ i += 6;
}
return (1);
}
-int ft_find_next_prime(int nb)
+int ft_find_next_prime(int nb)
{
while (!is_prime(nb))
nb++;
diff --git a/c05/ex08/ft_queens.c b/c05/ex08/ft_queens.c
new file mode 100644
index 0000000..ba2c742
--- /dev/null
+++ b/c05/ex08/ft_queens.c
@@ -0,0 +1,62 @@
+#include <unistd.h>
+#define TRUE 1
+#define FALSE 0
+#define BOARD_SIZE 10
+#define ABS(x) (x < 0 ? -(x) : x)
+
+void ft_putchar(char c)
+{
+ write(1, &c, 1);
+}
+
+static void print_cols(int cols[BOARD_SIZE])
+{
+ int i;
+
+ i = 0;
+ while (i < BOARD_SIZE)
+ ft_putchar(cols[i++] + '0'); // maybe +1
+ ft_putchar('\n');
+}
+
+static int valid_position(int cols[BOARD_SIZE], int x, int y)
+{
+ int i;
+
+ i = 0;
+ while (i < x)
+ {
+ if (y == cols[i])
+ return (FALSE);
+ if (ABS(x - i) == ABS(y - cols[i]))
+ return (FALSE);
+ i++;
+ }
+ return (TRUE);
+}
+
+static void solve(int cols[BOARD_SIZE], int x)
+{
+ int i;
+
+ if (x == BOARD_SIZE)
+ {
+ print_cols(cols);
+ return ;
+ }
+ i = -1;
+ while (++i < BOARD_SIZE)
+ {
+ if (!valid_position(cols, x, i))
+ continue ;
+ cols[x] = i;
+ solve(cols, x + 1);
+ }
+}
+
+void ft_queens(void) // may have bad name
+{
+ int cols[BOARD_SIZE];
+
+ solve(cols, 0);
+}
diff --git a/c05/main.c b/c05/main.c
index bdb7ad7..f66caf9 100644
--- a/c05/main.c
+++ b/c05/main.c
@@ -9,6 +9,7 @@
#include "ex05/ft_sqrt.c"
#include "ex06/ft_is_prime.c"
#include "ex07/ft_find_next_prime.c"
+#include "ex08/ft_queens.c"
int main()
{
@@ -81,10 +82,10 @@ int main()
printf("prime(%d) = %d\n", 899, ft_is_prime(899));
printf("prime(%d) = %d\n", 289, ft_is_prime(289));
printf("prime(%d) = %d\n", 2147483424, ft_is_prime(2147483424));
- /*for (int i = INT_MAX; i > INT_MAX - 1000000; i--)*/
- /*printf("%d is %d\n", i, ft_is_prime(i));*/
- for (int i = 3; i <= 41; i++)
- printf("%d is %d\n", i, ft_is_prime(i));
+ // for (int i = INT_MAX; i > INT_MAX - 1000000; i--)
+ // printf("%d is %d\n", i, ft_is_prime(i));
+ // for (int i = 3; i <= 41; i++)
+ // printf("%d is %d\n", i, ft_is_prime(i));
printf("---------------------\n");
printf("nextp(%d) = %d\n", 21, ft_find_next_prime(21));
@@ -93,4 +94,7 @@ int main()
printf("nextp(%d) = %d\n", 2147483600, ft_find_next_prime(2147483600));
/*for (int i = INT_MAX; i > INT_MAX - 1000000; i--)*/
/*printf("%d is %d\n", i, ft_find_next_prime(i));*/
+
+ printf("---------------------\n");
+ // ft_queens();
}