实现一个函数inv(n),该函数返回python中Zn中可逆元素的数量
我做这个作业已经一个多小时了,我甚至不知道从哪里开始。我想了解如何得到答案,而不仅仅是得到答案。我在python中工作。问题是: 实现一个函数实现一个函数inv(n),该函数返回python中Zn中可逆元素的数量,python,function,Python,Function,我做这个作业已经一个多小时了,我甚至不知道从哪里开始。我想了解如何得到答案,而不仅仅是得到答案。我在python中工作。问题是: 实现一个函数inv(n),返回Zn中可逆元素的数量。例如,inv(5) 应输出4和inv(100)应输出40 谢谢 结果: 4 40 函数inv通常称为 计算它的一种方法是使用一个事实,即它等于除以n的每个素数p的(1-1/p)乘积的n倍 使用一个Erastothenes筛选,您可以相对高效地计算它,代码在时间O(sqrt(n)*logn)内运行 我将从def in
inv(n)
,返回Zn中可逆元素的数量。例如,inv(5)
应输出4
和inv(100)
应输出40
谢谢
结果:
4
40
函数
inv
通常称为
计算它的一种方法是使用一个事实,即它等于除以n的每个素数p的(1-1/p)乘积的n倍
使用一个Erastothenes筛选,您可以相对高效地计算它,代码在时间O(sqrt(n)*logn)内运行
我将从def inv(n)开始:。。。没人知道你在说什么。。。我们不上那门课。。。乔兰·比斯利:例如,如果你“甚至不知道从哪里开始”我怀疑你现在的问题在于
python
或function
(你使用的标记),可能更多的是关于数学/算法/…你编辑了这个问题,让它变得难以理解。它以前要求可逆元素的数量,并给出了一些例子,但现在它要求“乘法元素”的数量,这并不意味着什么。
4
40
import math
def totient(n):
sn = int(math.sqrt(n)) + 2
a = [True] * sn
result = n
for i in xrange(2, sn):
if not a[i]:
continue
for j in xrange(i * 2, sn, i):
a[j] = False
if n % i == 0:
result = result - result // i
if result == n:
# n is prime.
result -= 1
return result
for i in xrange(1, 101):
print i, totient(i)