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);
|