首页 > 代码库 > 线性筛素数的方法
线性筛素数的方法
int n , a[100] , p[100];
void prime2(){
memset(a , 0 , n * sizeof(a[0])) ; //初始都为素数
int num = 0 , i , j ;
for( i =2 ; i <= n ; i++){
if(!a[i]) p[num++] = i ; // 质数表p[]
for(j = 0 ; j<num && i * p[j] <= n ; j++){
a[i * p[j]] = 1 ; // 筛以 i 为最大因子 的合数
if(!(i % p[j])) break ; // 找到i 的最小素因子 , 终止
}
}
}
结论:
1: 对于每一个数i,乘上 小于等于i的最小素因数p 的素数,就得到以i为最大因数的合数 T = i * p。
2: 设有一个数t,只要将所有以比t小的数i为最大因数的合数筛去,那么比t小的数里剩下的就只有素数了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。