summaryrefslogtreecommitdiff
path: root/euler58.c
diff options
context:
space:
mode:
Diffstat (limited to 'euler58.c')
-rw-r--r--euler58.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/euler58.c b/euler58.c
new file mode 100644
index 0000000..ac46073
--- /dev/null
+++ b/euler58.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+
+/*
+ * delta = 4n+4 delta = 4n+2
+ * 5 3
+ * [1]
+ * 7 9
+ * delta = 4n+6 delta = 4n+8
+ */
+
+int isprime(int n)
+{
+ if (n == 1 || n % 2 == 0)
+ return 0;
+
+ for (int i = 3; i * i <= n; i += 2) {
+ if (n % i == 0)
+ return 0;
+ }
+
+ return 1;
+}
+
+int main()
+{
+ int ndiag = 5;
+ int nprime = 3;
+ int s[4] = {3, 5, 7, 9};
+ int n = 2;
+
+ while (nprime * 10 > ndiag) {
+ s[0] += n * 4 + 2;
+ s[1] += n * 4 + 4;
+ s[2] += n * 4 + 6;
+ s[3] += n * 4 + 8;
+ for (int i = 0; i < 4; i++) {
+ if (isprime(s[i]))
+ nprime++;
+ }
+ ndiag += 4;
+ n += 2;
+ }
+ int sidelen = n + 1;
+ printf("%d\n", sidelen);
+}