Advertisement
Robert_JR

Digit Prime ***Solved***

Mar 3rd, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <string>
  7. #include <cstdlib>
  8. #include <vector>
  9. #define IN freopen("f:\\in.txt", "rt", stdin);
  10. #define OUT freopen("f:\\out.txt", "wt", stdout);
  11. #define FOR(n) for(int i = 0; i < n; i++)
  12. #define ll long long int
  13. #define STESTCASE int t;scanf("%d", &t);getchar();for(int tc = 1; tc <= t; tc++)
  14. #define TESTCASE int t;scanf("%d", &t);for(int tc = 1; tc <= t; tc++)
  15. #define PF printf
  16. #define SF scanf
  17. #define EP 0.000000001
  18. #define MAX 10000009
  19. #define DEBUGG printf("DEBUGG\n");
  20. using namespace std;
  21.  
  22. int n = 1000009;
  23. int prime[1000009];
  24. int gen[1000009];
  25.  
  26. int set_bit(int n, int position)
  27. {
  28.     return n | (1 << position);
  29. }
  30. bool get_bit(int n, int position)
  31. {
  32.     return n & (1 << position);
  33. }
  34.  
  35. void generate_prime()
  36. {
  37.     int i, j, root = sqrt(n);
  38.  
  39.     prime[0] = set_bit(prime[0], 0);
  40.     prime[0] = set_bit(prime[0], 1);
  41.  
  42.     for(i = 4; i <= n; i += 2) prime[i >> 5] = set_bit(prime[i >> 5], i & 31);
  43.  
  44.     for(i = 3; i <= root; i++)
  45.         if(!get_bit(prime[i >> 5], i & 31))
  46.             for(j = i * i; j <= n; j += i+i)
  47.                 prime[j >> 5] = set_bit(prime[j >> 5], j & 31);
  48.  
  49. //    for(i = 0; i < 100; i++)
  50. //        if(!get_bit(prime[i >> 5], i & 31))
  51. //            cout << i << ' ';
  52. //    cout << endl;
  53. }
  54.  
  55. void pregen()
  56. {
  57.     for(int i = 0; i <= n; i++)
  58.     {
  59.         if(!get_bit(prime[i >> 5], i & 31))
  60.         {
  61.             int num = i, temp = 0;
  62.             while(num > 0)
  63.             {
  64.                 temp += num % 10;
  65.                 num /= 10;
  66.             }
  67.             //cout << temp << ' ';
  68.  
  69.             if(!get_bit(prime[temp >> 5], temp & 31))
  70.             {
  71.                 gen[i] = gen[i-1] + 1;
  72.             }
  73.             else gen[i] = gen[i-1];
  74.         }
  75.         else gen[i] = gen[i-1];
  76.  
  77.         //cout << i << ' ' << gen[i] << endl;
  78.         //DEBUGG
  79.     }
  80.     //cout << gen[89] << endl;
  81. }
  82.  
  83.  
  84. int main()
  85. {
  86.     //IN OUT
  87.     generate_prime();
  88.     pregen();
  89.     //cout << gen[100000] << endl;
  90.     TESTCASE
  91.     {
  92.         int a, b;
  93.         SF("%d %d", &a, &b);
  94.         /*if(a == b)
  95.         {
  96.             if(!get_bit(prime[a >> 5], a & 31))
  97.             {
  98.                 int sum = 0;
  99.                 while(a > 0)
  100.                 {
  101.                     sum += a % 10;
  102.                     a /= 10;
  103.                 }
  104.                 if(!get_bit(prime[sum >> 5], sum & 31)) cout << 1 << endl;
  105.                 else cout << 0 << endl;
  106.             }
  107.             else cout << 0 << endl;
  108.         }
  109.         else if(get_bit(prime[a >> 5], a & 31)) PF("%d\n", gen[b] - gen[a]);
  110.         else PF("%d\n", (gen[b] - gen[a]) + 1);*/
  111.         PF("%d\n", gen[b] - gen[a-1]);
  112.     }
  113.  
  114.  
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement