summaryrefslogtreecommitdiff
path: root/euler72.c
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-05-27 14:05:48 +0800
committerIru Cai <mytbk920423@gmail.com>2018-05-27 14:05:48 +0800
commitd1be3105ba259970ebfcf71370fb4baca89abd86 (patch)
tree5c1548ec9ed65e0d1c732b8553ac566995aaf341 /euler72.c
parent12b78407f3ce4d6ee5f67fb0c6ce5c754cf78a58 (diff)
downloadproject_euler-d1be3105ba259970ebfcf71370fb4baca89abd86.tar.xz
72,120
Diffstat (limited to 'euler72.c')
-rw-r--r--euler72.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/euler72.c b/euler72.c
new file mode 100644
index 0000000..d62c508
--- /dev/null
+++ b/euler72.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+
+int euler_phi(int n)
+{
+ int phi = n;
+
+ if (n % 2 == 0) {
+ while (n % 2 == 0)
+ n /= 2;
+ phi /= 2;
+ }
+
+ for (int i = 3; i*i <= n; i++) {
+ if (n % i == 0) {
+ while (n % i == 0)
+ n /= i;
+ phi /= i;
+ phi *= (i-1);
+ }
+ }
+
+ if (n > 1)
+ phi = phi / n * (n-1);
+
+ return phi;
+}
+
+int main()
+{
+ long long cnt = 0;
+ for (int i = 2; i <= 1000000; i++)
+ cnt += euler_phi(i);
+
+ printf("%lld\n", cnt);
+}