C++ 中的欧拉函数

发布于 2025-01-09 15:34:46 字数 595 浏览 0 评论 0 原文

有人可以解释一下,这个欧拉函数是什么意思:

int phi (int n) {
    int result = n;
    for (int i=2; i*i<=n; ++i)
        if (n % i == 0) {
            while (n % i == 0)
                n /= i;
            result -= result / i;
        }
    if (n > 1)
        result -= result / n;
    return result;
}

我试图制定一个标准路径来解决这个任务,但它超出了时间限制。我找到了欧拉函数的这种解释,但我无法理解它。为什么我们要迭代 i*i 而不是 iwhile 循环中发生了什么等等。我知道我们可以将欧拉函数写为 f(n) = n * (1-1/p1)(1-1/p2)...(1-1/pk),其中 < code>pi 是一个素数,但我不明白这段代码是如何工作的。

Can someone explain me, what is mean this Euler function:

int phi (int n) {
    int result = n;
    for (int i=2; i*i<=n; ++i)
        if (n % i == 0) {
            while (n % i == 0)
                n /= i;
            result -= result / i;
        }
    if (n > 1)
        result -= result / n;
    return result;
}

I tried to make a standart path to solve this task, but it is over time limit. I found this interpretation of Euler function, but I can't understand it. Why we're iterating i*i<n not i<n, what's happening in while loop and so on. I know that we can write Euler function as f(n) = n * (1-1/p1)(1-1/p2)...(1-1/pk), where pi is a prime number, but I don't understand how this code is working.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

神经暖 2025-01-16 15:34:47

我们这样迭代是为了提高时间性能,因为一个数的所有质因数都等于或小于该数的平方根(如果一个数没有这个数,那么它就是一个质数)。然后,当我们找到该数字的质因数时,我们将数字 n 除以该因数,直到我们无法再除它为止,因此我们从该数字中提取质因数。

We are iterating like this for the time performance because all prime factors of a number are equal or less with the square root of that number (if a number has not on of this, then it is a prime number). Then when we find a prime factor of the number we divide our number n by that factor until we can no longer divide it so we are extracting the prime factor from the number.

安静被遗忘 2025-01-16 15:34:47

r*(1-1/pk) = r - r/pk

这正是 result -= result/我是的。 result 是到目前为止的乘积,i 是下一个素数。

r*(1-1/pk) = r - r/pk

Which is precisely what result -= result/i does. result is the product up to this point and i is the next prime divisor.

幻梦 2025-01-16 15:34:47

您必须确保 pi 是 n 的质因数,而不仅仅是小于 n 的任何质数。

You must make sure that pi is a prime factor of n, not just any prime number less than n.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文