数学知识——质数详解
创作时间:
作者:
@小白创作中心
数学知识——质数详解
引用
CSDN
1.
https://blog.csdn.net/lianone_/article/details/145221060
本文详细介绍了质数相关的基础知识和算法实现,包括质数的判定方法、质因数分解以及两种经典的筛质数算法(埃拉托斯特尼筛法和欧拉筛法)。对于编程和算法学习者来说,这些内容具有很高的参考价值。
一、判定质数
什么是质数?我们小学都学过,质数n是约数只有1和他自身的整数。
如何判定质数?暴力做法是枚举从小到大枚举每个数看能否整除,时间复杂度是O(n)。还有一个方法,如果a是n的约数,那么n/a也是n的约数,对于一对约数(a,n/a),其中较小的数在区间,所以时间复杂度是。
试除法代码如下:
bool is_prime(int x)
{
if(x==1)return 0;
for(int i=2;i*i<=x;i++)//注意:如果i*i爆int,则i*i改为i<=x/i或i<=sqrt(x)
{
if(x%i==0)return 0;
}
return 1;
}
core idea:x不是质数的条件为x能找到约数对(约数对中较小的数)或x=1
二、分解质因数
- 小学中的分解质因数如下图:
其中n中最多只有一个大于的因子,原因是如果有两个大于的因子,相乘会大于n(反证法)
- 根据分解质因数的过程,模拟如下代码:
int n;
int a[10001];//a[i]为质因子i的个数,用于统计每个质因子出现的个数
void decompose(int x)//分解x的质因数
{
for(int i=2;i*i<=x;i++)
{
while(x%i==0)a[i]++,x/=i;
}
if(x>1)a[x]++;//x>1,说明这就是那个大于根下x的质因子
}
时间复杂度为最好情况,循环logn次跑完 最坏情况n是质数,枚举次
core idea:模拟小学分解质因数的过程
三、筛质数
埃式筛法
core idea:从小到大(在某个范围里)枚举每个数,如果是质数,则存储起来且标记它的合数们
代码如下:
typedef long long LL;
const int N=100000010;
int vis[N];//vis[i]为1/0,用于标记是否质数
int prim[N];//prim[i]为第i个质数,用于存储质数的数组
int cnt;//cnt为质数个数
void eratosthenes(int n)
{
for(LL i=2;i<=n;i++)//在[2,n]范围内筛质数
{
if(!vis[i])
{
prim[++cnt]=i;
for(LL j=i*i;j<=n;j+=i)//对i的合数们进行标记
{vis[j]=1;}
}
}
}
i的合数们是什么呢?比如2在 [2,20]合数为{4,6,8,10,12,14,16,18,20} 3在[2,20]的合数为{9,12,15,18},对这些合数进行标记是为了避免他们被当作质数存储进数组。
时间复杂度为O(nloglogn)
欧拉算法
core idea:
代码如下:
const int N = 10000010;
int vis[N]; // vis[i]为1/0,用于标记是否质数
int prim[N]; // prim[i]为第i个质数,用于存储质数的数组
int cnt; // 质数个数
void get_prim(int n){
for(int i=2; i<=n; i++){
if(!vis[i]) prim[++cnt] = i;
for(int j=1; 1LL*i*prim[j]<=n; j++){
vis[i*prim[j]] = 1;
if(i % prim[j] == 0) break;//prim[j]一定是i的最小质因子。因为prim[j]是从小到大遍历的 一旦出现i%prim[j]=0 prim[j]一定是i的最小质因子 因此prim[j]也一定是i*prim[j]的最小质因子。如果i%prim[j]!=0 prim[j]一定是小于i的所有质因子 因此prim[j]也一定是i*prim[j]的最小质因子。
}
}
}
举例说明:
时间复杂度为O(N)
总结
若n在10的6次方的话,欧拉筛和埃氏筛的时间效率差不多,若n在10的7次方的话,欧拉筛会比埃氏筛快了大概一倍.而且埃氏筛法会重复标记一个合数,而欧拉筛法避免将一个合数标记多次。
热门推荐
劳动合同解除规定及后续处理
压箱底的凉拌经典,酸辣味美的青木瓜丝,0基础教程,脆香又营养
如何确定临床试验的样本量和分组方式?
历史名篇和南昌城市空间特色表达
绿色守护:甘蔗病虫害防治的科学策略
LCR测试仪继电器线圈电阻测量:方法、挑战与意义
月入3万,在大城市很难体面
现管类理财7日年化收益率跌至1.72%,创近一年新低
家庭花卉养护全攻略:从浇水施肥到病虫害防治
基普乔格官宣参加2025伦敦马拉松,他的训练方法出奇的简单,值得大众借鉴
银行储蓄卡的账户余额变动提醒方式有哪些?
如何通过锻炼改善儿童近视
全国企业管理现代化创新成果奖:背景、评选标准与申请指南
外国公司在美国登记流程全解析:从注册到合规的详细指南
中国科学家成功合成立方偏转聚合氮,高能量密度材料研究取得重要突破
信息茧房与大数据 “杀熟” 今天你被算法算计了吗?
从时间线到任务分解:甘特图的全面应用指南
10的膨胀螺栓为何要12的钻
世界痛风日|痛风急性发作时如何“自救”?
白血病七种类型有哪些
牙齿轻微晃动是正常的吗?详细解析牙齿晃动处理方式:药物!固定!修复方式多
嘴巴苦涩口干是什么病的前兆
单摆周期问题及摆线等时曲线
无缝钢管材质介绍 不同用途材质不同
打造高效学习环境的全面指南:从物理、心理到时间管理
猪场如何实现低成本育肥?猪场盈利秘籍分享!
希特勒的情妇,吉莉拉包尔到底是因何而死的?
瘦肉精司法解释:严惩食品非法添加剂,保障人民群众生活质量
如何应对转氨酶升高:生活习惯与医疗建议全解析
瘦肉精对人体有哪些危害?如何有效防范?