Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.01 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define min(a, b) ((a) < (b) ? (a) : (b))
  4. #define REP(i, n) for ((i) = 0; i < (n); ++i)
  5. #define MAX 50000
  6. #define LIMIT 7000
  7.  
  8. bool isP[MAX];
  9. int primes[LIMIT], a, b, k;
  10. void sieve() {
  11.     int i, k = 0, j;
  12.     isP[0] = isP[1] = 1;
  13.     for (i = 2; i * i < MAX; ++i) {
  14.         if (!isP[i]) {
  15.             for (j = i * i; j < MAX; j += i) {
  16.                 isP[j] = 1;
  17.             }
  18.         }
  19.     }
  20.     REP (i, MAX) {
  21.         if (!isP[i] && k < LIMIT) {
  22.             primes[k++] = i;
  23.         }
  24.     }
  25. }
  26. bool isPrime(int n) {
  27.     if (MAX > n) {
  28.         return !isP[n];
  29.     } else {
  30.         int i;
  31.         for (i = 0; i < LIMIT && primes[i] != 0; ++i) {
  32.             if (n % primes[i] == 0) {
  33.                 return 0;
  34.             }
  35.         }
  36.         return 1;
  37.     }
  38. }
  39. int f(int n, int i) {
  40.     if (n < 1) {
  41.         return 0;
  42.     }
  43.     int j;
  44.     int res = n;
  45.     for (j = i; primes[j] < k && primes[j] <= n; ++j) {
  46.         res -= f(n / primes[j], j + 1);
  47.     }
  48.     return res;
  49. }
  50. int main() {
  51.     sieve();
  52.     scanf("%d %d %d", &a, &b, &k);
  53.     if (!isPrime(k)) {
  54.         puts("0");
  55.     } else {
  56.         printf("%d\n", f(b / k, 0) - f((a - 1) / k, 0));
  57.     }
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement