查看“︁欧拉函数”︁的源代码
←
欧拉函数
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
==求单个欧拉函数== <syntaxhighlight lang="cpp" line> int phi(int n) { int ans = n; for (int i = 2; 1LL * 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> ==线性筛求欧拉函数== <syntaxhighlight lang="cpp" line> const int MAXN = 40000; bool p[MAXN + 5]; int phi[MAXN + 5]; vector<int> pri; // 筛出 1~n 中的每个数是否为质数 // 顺带求出所有欧拉函数 void get_primes(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++) { // i*pri[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>
返回
欧拉函数
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息