查看“︁质数判断”︁的源代码
←
质数判断
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
==判断单个质数== <math>O(\sqrt{x})</math> <syntaxhighlight lang="cpp" line> bool is_prime(long long x) { if (x < 2) return false; for (long long i = 2; i * i <= x; i++) if (x % i == 0) return false; return true; } </syntaxhighlight> ==筛法== ===埃氏筛=== <math>O(n\log \log n)</math> <syntaxhighlight lang="cpp" line> const int MAXN = 10'000'000; bool p[MAXN + 1]; //筛出 1~n 中的每个数是否为质数 void get_primes(int n) { //初始化 p[0] = p[1] = false; for (int i = 2; i <= n; i++) p[i] = true; //筛 for (int i = 2; i <= n; i++) if (p[i]) for (int j = i + i; j <= n; j += i) p[j] = false; } </syntaxhighlight> ===线性筛/欧拉筛=== <math>O(n)</math> <syntaxhighlight lang="cpp" line> const int MAXN = 10'000'000; bool p[MAXN + 1]; 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; for (int i = 2; i <= n; i++) { if (p[i]) pri.push_back(i); for (int j = 0; j < pri.size(); j++) { // i*pri[j] if (i * pri[j] > n) break; p[i * pri[j]] = false; if (i % pri[j] == 0) break; } } } </syntaxhighlight>
返回
质数判断
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息