nssl1210-质数【素数筛】
生活随笔
收集整理的這篇文章主要介紹了
nssl1210-质数【素数筛】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目大意
求l~rl\sim rl~r這個區間素數或兩個素數的乘積的數個數
解題思路
在歐式篩的時候判斷j是不是素數,是就標記就行了。
code
#pragma GCC optimize(2) #include<cstdio> #define N 10000000 #define ll int using namespace std; ll prime[N],s[N*2],l,r,q,cnt; bool v[N+10]; ll read(){int x=0,flag=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')flag=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*flag; } void write(ll x) {if(x>9) write(x/10);putchar(x%10+48);return; } void primes() {for(ll i=2;i<=N;i++)if(!v[i]){prime[++cnt]=i;s[i]=1;//素數也標記for(ll j=2;i*j<=N;j++){if(!v[j]&&j<=i)//是素數的乘積s[i*j]=1;v[i*j]=true;}} } int main() {primes();for(ll i=1;i<=N;i++)s[i]+=s[i-1];q=read();for(ll i=1;i<=q;i++){l=read();r=read();write(s[r]-s[l-1]);puts("");} }總結
以上是生活随笔為你收集整理的nssl1210-质数【素数筛】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D 打印微缩景观,凯华 & Z
- 下一篇: “双 11”铁路快运服务今日启动,每日安