- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
要计算与 N 互质且小于 N 的整数的数量,我们可以简单地计算它的 ETF .然而,要计算与 N 互质但小于 M 的整数数量,其中 M < N,我们如何修改/计算它?我已尝试使用代码来计算 ETF,但无法继续如何修改它以获得所需的结果。
代码:
int etf(int n)
{
int result = n;
int i;
for(i=2;i*i <= n;i++)
{
if (n % i == 0) result -= result / i;
while (n % i == 0) n /= i;
}
if (n > 1) result -= result / n;
return result;
}
谢谢
最佳答案
您需要使用 inclusion-exclusion principle .举个例子:假设你想计算与30 = 2 * 3 * 5互质且小于20的整数个数。
首先要注意的是,您可以将不互质的数字数到 30,然后从总数中减去它们,这样就容易多了。 20以内的2的倍数是20/2=10,3的倍数是20/3=6(发言),5的倍数是20/5=4。
但是,请注意,我们不止一次计算过 6 = 2 * 3 之类的数字,包括 2 的倍数和 3 的倍数。为了说明这一点,我们必须减去每个数字的倍数两个素数的乘积。
另一方面,这会多次减去三个素数的倍数——因此您必须将该计数添加到末尾。这样做,交替符号,直到达到整除 N 的素数总数。在示例中,答案将是
20/1 - 20/2 - 20/3 - 20/5 + 20/2*3 + 20/3*5 + 20/2*5 - 20/2*3*5= 20 - 10 - 6 - 4 + 3 + 1 + 2 - 0= 6.
(我们数的数字是 1、7、11、13、17 和 19。)
关于algorithm - 修改 Euler Totient 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12709813/
作为我研究的一部分,我正在使用不同的并行计算语言实现 Totient 求和(Euler 的 Totient),老实说,我在 MapReduce 方面相当吃力。主要目标是对运行时、效率等进行基准测试..
经过一番浏览,我找到了这段代码,用于使用 Eratostenes 筛法在线性时间内计算欧拉的 phi 值。但是未能理解这段代码中使用的主要逻辑,特别是内部 for 循环中所做的事情和使用的想法这个循环
int main(void) { int n, div, a, b; double phi; printf("Enter n:\n"); if (scanf("%d", &n) < 1
我在一个编码平台上看到这段代码可以有效地计算不同值的欧拉 totient。我无法理解这个实现。我真的很想学这个。谁能帮我解释一下? for(int i = 1; i < Maxn; i++) { //
我正试图找到一种有效的方法来计算 Euler's totient function . 这段代码有什么问题?它似乎不起作用。 def isPrime(a): return not ( a <
这是欧拉 Totient 的例子。输入 n 的欧拉 Totient 函数 ?(n) 是 {1, 2, 3, …, n} 中与 n 互质的数字的计数,即与 n 的 GCD(最大公约数)为 1 的数字。我
来自Python ProblemSet我想测试以下函数,但似乎无法定义 mult 和 coprime 。我尝试导入数学,但这没有帮助。有什么建议吗? >>> import itertools >>>
要计算与 N 互质且小于 N 的整数的数量,我们可以简单地计算它的 ETF .然而,要计算与 N 互质但小于 M 的整数数量,其中 M 1) result -= result / n; ret
我一直在努力tackle this problem ,但我很难理解它: Let φ be Euler's totient function, i.e. for a natural number n,
对于自然数 n,欧拉的 totient 函数定义为集合 {1,...n} 中与 n 互质的自然数的数量>。我必须用 C 语言编写一个程序,以便对于输入 n,输出是 n 的欧拉总函数。这是我的尝试: #
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我很难使用 Hadoop map reduce 来计算两个值之间的总和。 例如,我想计算 [1, 15000] 的总和。但据我所知,map-reduce 处理具有共同点(标签)的数据。 我设法理解了该
我正在解决ETF SPOJ的问题。我使用埃拉托色尼筛法来计算素数,然后使用 Phi 的基本定义,但 SPOJ 给出了错误的答案。我已经在 GCC 编译器上对其进行了测试,其中提到的范围为 0 到 10
我已经设法让 Eulers Totient Function 的一个版本工作,尽管它适用于较小的数字(与我需要它计算的 1024 位数字相比,此处较小的数字更小) 我的版本在这里- public st
以清晰易懂的方式重新发布它,没有任何未正确显示的复杂 MathJax: 为了好玩,我浏览了一些计算机科学/数论挑战网站,他们提出了以下问题,具体如下: 让P(n) = sum{1 {
我正在制作一个有趣的加密程序,但我在做一些数学运算时遇到了问题。我需要:“Compute φ(n) = φ(p)φ(q) = (p − 1)(q − 1), where φ is Euler's to
我的老师给了我们一个关于数学问题的 acm 问题。我试过了,但得到了 TLE。 问题来了 欧拉的 Totient 函数 φ (n) [有时称为 phi 函数] 用于确定与 n 互质且小于 n 的数的数
我是一名优秀的程序员,十分优秀!