summarylogtreecommitdiffstats
path: root/14.patch
blob: 4513fab33c44ce30d49bbdaa318bcea5cd4ce91c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
From f0090b2c4ccd4944fb4a46837aa3b78a78c6ed23 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20=C8=98uteu?= <trizen@protonmail.com>
Date: Tue, 5 Nov 2019 16:50:24 +0200
Subject: [PATCH] Handle 2^n in is_totient()

Fixes https://github.com/danaj/Math-Prime-Util/issues/33.

See also: [A058213](https://oeis.org/A058213), [A058215](https://oeis.org/A058215).
---
 gmp_main.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gmp_main.c b/gmp_main.c
index 5851d9f..41912e4 100644
--- a/gmp_main.c
+++ b/gmp_main.c
@@ -917,6 +917,11 @@ int _totpred(mpz_t n, mpz_t maxd)
     if (mpz_cmp_ui(n,2) == 0) return 1;
 
     mpz_init(N);  mpz_init(p);
+    
+    mpz_sub_ui(N, n, 1);
+    mpz_and(N, N, n);
+    if (mpz_sgn(N) == 0) return 1;
+  
     mpz_tdiv_q_2exp(N, n, 1);
     res = 0;
     mpz_add_ui(p, n, 1);