题解 P6067 【[RC-02] yltx 数对】
feecle6418 · · 题解
Update on 2020.5.11
bitset 优化筛法。
首先
线性筛会爆空间(似乎也能过?),只能用埃氏筛。
先筛掉
用 bitset 压一下位就行了。注意不需要筛偶数,可大大减少时间和空间。
std:
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int k=1,s[10005],prime[10005];
bitset<50110005>vst;
inline bool Prime(register int n){
return n<2?0:(n==2?1:(n%2&&!vst[n>>1]));
}
int main() {
// freopen("5.in","r",stdin);
// freopen("5.out","w",stdout);
for(int i=9; i<=100030000; i+=6)vst[i>>1]=1;
for(int i=15; i<=100030000; i+=10)vst[i>>1]=1;
for(register int i=7; i<=20000; i+=2){
if(vst[i>>1])continue;
for(register int j=i*(i/6*6+1); j<=100030000; j+=i*6){
vst[j>>1]=1;
vst[(j>>1)+(i<<1)]=1;
}
}
int T,x0,y0,s=0;
scanf("%d%d%d",&T,&x0,&y0);
while(T--){
x0=((7*x0+13)^(x0/13-7));
y0=((7*y0+13)^(y0/13-7));
int x=(x0%10000+10000)%10000+1,y=(y0%10000+10000)%10000+1;
if(Prime(x)&&Prime(y)&&Prime(x*y-3*(x-y)))s++;
}
cout<<s;
return 0;
}