summaryrefslogtreecommitdiff
path: root/euler58.c
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-05-26 16:12:24 +0800
committerIru Cai <mytbk920423@gmail.com>2018-05-26 16:12:24 +0800
commit1c76beb0d4ccf57d2db84cf417f37a3a155fb905 (patch)
tree310bbc9bc48b2860f42b9994a62c38a1b91829b8 /euler58.c
parentc98d66aca04d0d839833b6b81bf249822c4ca350 (diff)
downloadproject_euler-1c76beb0d4ccf57d2db84cf417f37a3a155fb905.tar.xz
58, 76, 97, 104
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);
+}