Advertisement
anas_harby

Untitled

Jul 30th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 1000001
  3. using namespace std;
  4. bool c[MAX];
  5. int a, b, k, sums[MAX];
  6.  
  7. void genPrime() {
  8.     for (int i = 2; i <= b; i++) {
  9.         if (!c[i])
  10.             for (int j = i * 2; j <= b; j += i)
  11.                 c[j] = true;
  12.     }
  13.     for (int i = 2; i <= b; i++) {
  14.         sums[i] = sums[i - 1];
  15.         if (!c[i])
  16.             sums[i]++;
  17.     }
  18. }
  19.  
  20. bool check(int l) {
  21.     for (int i = a; i<= b - l + 1; i++)
  22.         if (sums[i + l - 1] - sums[i - 1] < k)
  23.             return false;
  24.     return true;
  25. }
  26.  
  27. int main()
  28. {
  29.     //Watching beginnings of social decay..
  30.     cin >> a >> b >> k;
  31.     genPrime();
  32.     int l = -1, left = 1, right = b - a + 1;
  33.     while (left <= right) {
  34.         int middle = (right + left) / 2;
  35.         if (check(middle)) {
  36.             right = middle - 1;
  37.             l = middle;
  38.         }
  39.         else
  40.             left = middle + 1;
  41.     }
  42.     cout << l;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement