查看“︁06-数学相关/03-欧拉函数”︁的源代码
←
06-数学相关/03-欧拉函数
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
欧拉函数 <math>\varphi(n)</math> 表示 <math>1\sim n</math> 中与 <math>n</math> 互质的数的个数。 == 求单个欧拉函数 == <math>O(\sqrt{n})</math> <math>\varphi(n)=n\times \prod_{p\mid n}\left(1-\frac{1}{p}\right)</math> <syntaxhighlight lang="cpp"> long long phi(long long n) { long long ans = n; for (long long i = 2; i * i <= n; i++) if (n % i == 0) { ans = ans / i * (i - 1); while (n % i == 0) n /= i; } if (n > 1) ans = ans / n * (n - 1); return ans; } </syntaxhighlight> == 线性筛求欧拉函数 == <math>O(n)</math>,同时求出 <math>1\sim n</math> 所有数的欧拉函数值。 <syntaxhighlight lang="cpp"> const int MAXN = 40000; bool p[MAXN + 5]; int phi[MAXN + 5]; vector<int> pri; void get_phi(int n) { for (int i = 1; i <= n; i++) p[i] = true; p[0] = p[1] = false; phi[1] = 1; for (int i = 2; i <= n; i++) { if (p[i]) { pri.push_back(i); phi[i] = i - 1; } for (int j = 0; j < pri.size(); j++) { if (1LL * i * pri[j] > n) break; p[i * pri[j]] = false; if (i % pri[j] == 0) { phi[i * pri[j]] = phi[i] * pri[j]; break; } else phi[i * pri[j]] = phi[i] * (pri[j] - 1); } } } </syntaxhighlight> == 欧拉函数性质 == - 若 <math>p</math> 是质数,<math>\varphi(p)=p-1</math> - 若 <math>p</math> 是质数,<math>\varphi(p^k)=p^k-p^{k-1}</math> - 若 <math>\gcd(a,b)=1</math>,则 <math>\varphi(ab)=\varphi(a)\times\varphi(b)</math>(积性函数) - <math>\sum_{d\mid n}\varphi(d)=n</math> == 欧拉定理 == 若 <math>\gcd(a,m)=1</math>,则: <math>a^{\varphi(m)}\equiv 1\pmod m</math> 当 <math>m</math> 为质数时就是费马小定理。 [[Category:数学相关]] [[Category:三三文档]]
返回
06-数学相关/03-欧拉函数
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息