Algorithm 欧拉';用于总计算的s筛

Algorithm 欧拉';用于总计算的s筛,algorithm,math,Algorithm,Math,伙计们,这里有一个算法,它可以为所有人找到phi(i)=eulers toticent(i) 1从你给出的公式开始,如果我们从σ中取φ(n),我们得到: Sigma[d|n,d!=n]phi(d)+phi(n)=n 因此: phi(n)=n-Sigma[d | n,d!=n]phi(d) 这就是算法所做的:对于每个n,它从n的值开始,然后减去phi(d),对于n的每个除数d,除了n本身。注意,这是以不同的顺序完成的,在外循环中迭代d,在内循环中迭代n,因为找到一个数字的倍数要比找到它的除数快。我

伙计们,这里有一个算法,它可以为所有人找到phi(i)=eulers toticent(i)
1从你给出的公式开始,如果我们从σ中取φ(n),我们得到:

Sigma[d|n,d!=n]phi(d)+phi(n)=n

因此:

phi(n)=n-Sigma[d | n,d!=n]phi(d)


这就是算法所做的:对于每个
n
,它从
n
的值开始,然后减去
phi(d)
,对于
n
的每个除数
d
,除了
n
本身。注意,这是以不同的顺序完成的,在外循环中迭代
d
,在内循环中迭代
n
,因为找到一个数字的倍数要比找到它的除数快。

我没有投反对票,但这听起来像是家庭作业,这不是一个明确的问题。不,这不是家庭作业,我试图理解我在codeforces上找到的算法。基本上我已经用欧拉的乘积公式用素数进行了筛选,但我想了解这一点。有理解困难的。所以请帮忙。建议问数学。stackexchange而不是StackOverflow现在感觉很空虚。是的,也许吧。我通常是批评它的人之一。但你在问一个数学问题,这是一个编程网站。这是一个数学问题,因为它需要有人看一个算法,并使用离散数学来找出如何做。。。。某物“帮助我们实施”是什么意思?你不是已经有算法了吗?或者你的意思是它为什么会起作用?哦,该死!我在想从上面的公式中从哪里得到φ(n),但是没有把n算作它本身的除数。我的错:(
int phi[n + 1];
for (int i = 1; i <= n; ++i) phi[i] = i;
//invariant: phi(x) for all 1 <= x < d is calculated during the
//start of the dth iteration.
for (int d = 1; d <= n; ++d) { //divisors
    for (int j = 2 * d; j <= n; j += d) phi[j] -= phi[d];
}