Description

 

Input

Output

 

Sample Input

Input 1
2 16 2
Input 2
100 1000 2333333
Input 3
10000000000 10000001000 423

Sample Output

Output 1
3
Output 2
561
Output 3
170
 

Data Constraint

 
做法:直接跑R-L只有10^7,考虑将min(sqrt(R),K)之前的质数筛出来,然后暴力就好了,用一个桶维护L,R中满足的情况。
 1 #define LL long long
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <cstring>
 5 #include <cmath>
 6 #define N 100000007
 7 using namespace std;
 8 LL L,R,K,ans;
 9 bool zs[N], A[N];
10 
11 LL min(LL a,LL b) {return a<b?a:b;}
12 
13 void Pre_work(){
14     for(int i=2;i<=K;i++){
15         if(zs[i]) continue;
16         for(int j=2;j<=K/i;j++)    zs[i*j]=1;
17     }
18     zs[1]=1;
19 }
20 
21 int main(){
22     freopen("prime.in","r",stdin);
23     freopen("prime.out","w",stdout);
24     cin>>L>>R>>K;
25     K=min(sqrt(R),K);
26     Pre_work();
27     for(int i=1;i<=K;i++){
28         if(!zs[i]){
29             if(L<=i&&i<=R) ans^=i;
30             LL S=L/i;    if(i*S<L) S++;
31             LL E=R/i;
32             for(LL j=S;j<=E;j++)
33                 A[i*j-L]=1;
34         }
35     }
36     for(LL i=L;i<=R;i++)
37         if(!A[i-L]) ans^=i;
38     cout<<ans;
39 }
View Code