质数与约数
质数与约数
素数判断及筛法#
试除法#
若有一个正整数
时间复杂度
bool is_prime(int n){
if(n<2)return false;
for(int i=1,sq=sqrt(n);i<=sq;i++){
if(n%i==0)return false;
}
return true;
}
埃氏筛#
对于每个质数
于是从
void found_prime() {
memset(vis, 0, sizeof(vis));
vis[0] = 1; vis[1] = 1; // 特殊处理 0 和 1
for(int i=2; i<=n; ++i) {
if(!vis[i]) { // i 为质数
for(int j=i*i; j<=n; j+=i)
vis[j] = 1; // 标记合数
}
}
}
线性筛#
#include<bits/stdc++.h>
using namespace std;
const int N=1e8+50;
int prime[N],cnt;
bool vis[N];
int n,q;
void init(){
for(int i=2;i<=n;i++){
if(!vis[i])prime[++cnt]=i;
for(int j=1;j<=cnt&&prime[j]<=n/i;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
int main(){
scanf("%d%d",&n,&q);
init();
while(q--){
int x;
scanf("%d",&x);
printf("%d\n",prime[x]);
}
}
素性测试#
算数基本定理#
算术基本定理又名唯一分解定理,任何一个大于 1 的正整数都能唯一分解为若干个质数的乘积。
(这东西太简单就不证了吧)
推论1:
推论2:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具