欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jzoj 5835. Prime

程序员文章站 2024-02-11 13:23:52
...

题目大意:

jzoj 5835. Prime
jzoj 5835. Prime

思路:

这题算不上一个套路题吧,可以看到R-L很小,可以线性筛搞过去,但是l前面的也去筛就太慢了,所以只考虑筛l~r区间里面的数,又因为r<10e14,所以只需要用min(sqrt(r),k),去筛l~r每一个数就好了。考场认为这样跑不过就没打!!打起来很方便呢。

程序:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#define N 10000005
#define LL long long
LL ans,l,r,k,n,len;
LL h[N],flag[N],a[N];
int main(){
    freopen("prime.in","r",stdin);
    freopen("prime.out","w",stdout);
    scanf("%lld%lld%lld",&l,&r,&k);
    n=10000000;
    for (LL i=2;i<n;i++){
        if (!h[i]) h[i]=1,a[++len]=i;
        for (LL j=1;j<=len;j++){
            if (i*a[j]>n) break;
            h[i*a[j]]=1;
            if (!(i%a[j])) break;
        }
    }
    for (LL i=1;i<=len;i++)
    if (a[i]<=k){
        LL ll=0;
        if (l%a[i]!=0)  ll=(l/a[i]+1)*a[i];
                    else  ll=(l/a[i])*a[i];
        for (LL j=ll;j<=r;j+=a[i])  if (a[i]<j-1) flag[j-l+1]=1;
    }
    for (LL i=l;i<=r;i++) if (!flag[i-l+1]) ans=ans^i;
    printf("%lld",ans); 
}
相关标签: 何嘉阳