网站开发需求说明书南通高端网站建设开发
web/
2025/9/29 3:43:34/
文章来源:
网站开发需求说明书,南通高端网站建设开发,个人网站能做什么,vi企业整套设计公司问题#xff1a; 求 $[L, R]$ 之间的素数表 解法#xff1a; 一个合数 $n$ 的最小素因子不超过 $\sqrt{n}$。 先用埃氏筛法求出 $[1,\lfloor \sqrt{R} \rfloor]$ 上的素数表 再在 $[L, R]$ 上用埃氏筛法求素数 const int N(1e5);
bool isprime[N];
int prime[N];
void init()…问题 求 $[L, R]$ 之间的素数表 解法 一个合数 $n$ 的最小素因子不超过 $\sqrt{n}$。 先用埃氏筛法求出 $[1,\lfloor \sqrt{R} \rfloor]$ 上的素数表 再在 $[L, R]$ 上用埃氏筛法求素数 const int N(1e5);
bool isprime[N];
int prime[N];
void init(){memset(isprime, -1, sizeof(isprime));isprime[0]isprime[1]0;int np0;for(int i0; iN; i){if(isprime[i]){prime[np]i;for(int j2*i; jN; ji)isprime[j]0;}}
}
typedef long long ll;
const int M(1e5);
bool ok[M];
int res[M];
int seive(ll l, ll r){ // l, r 1memset(ok, -1, sizeof(ok));if(l1) ok[0]0; //error-proneint ksqrt(r);for(int i0; prime[i]k; i){ll j(lprime[i]-1)/prime*prime;jmax(j, (ll)2*prime[i]);for(; jr; jprime[i])ok[j-l]0;}int np0;for(int i0; ir-l; i)if(ok[i]) res[np]i(ll)l;return np;
} 更新 不必先把 $[2, \lfloor \sqrt{R} \rfloor]$ 上的素数存下来。更好的做法是先分别做好 $[2, \lfloor \sqrt{R} \rfloor]$ 和 $[L, R]$ 的表然后从 $[2, \lfloor \sqrt{R} \rfloor]$ 的表中筛得素数的同时也将其倍数从 $[L, R]$ 中划去。 const int N1e65, Msqrt(1e9);bool is_prime[N];
bool is_prime_small[M1];void segment_seive(int l, int r){ // [l,r]int tsqrt(r);for(int i2; it; i)is_prime_small[i]true;for(int i0; ir-l; i)is_prime[i]true;for(int i2; it; i)if(is_prime_small[i]){for(int j2*i; jt; ji)is_prime_small[j]false;for(int jmax(2, (li-1)/i)*i; jr; ji)is_prime[j-l]false;}
} 转载于:https://www.cnblogs.com/Patt/p/4805212.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83676.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!