Emania

PAL 04

Nov 25th, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.19 KB | None | 0 0
  1. int a_num(int a_min, int a_max, int * base, int base_idx, int m){
  2.     int i;
  3.     int z = 1;
  4.     int al = a_min-1;
  5.     int ah = a_max - 1;
  6.    
  7.     for(i = 0; i < base_idx; i++){
  8.         z *= base[i];
  9.     }
  10.     if(m%4 == 0) z *= 2;
  11.    
  12.     int al_mod = al % z;
  13.     if(al_mod != 0)  al += (z - al_mod);
  14.     ah -= ah % z;
  15.     return (ah - al) / z + 1;
  16. }
  17.  
  18. int c_comb(int c_min, int c_max, int * base, int base_idx){
  19.     int fb = c_max - not_prime(c_max, base, base_idx);
  20.     int fa1 = c_min - 1 - not_prime(c_min - 1, base, base_idx);
  21.     return fb - fa1;
  22. }
  23.  
  24. //computes the number of not prime numbers
  25. int not_prime(int c, int * base, int base_idx){
  26.     int my_sum = 0;
  27.     int product = 1;
  28.     int sign;
  29.     int i, j, tmp;
  30.     unsigned int comb[2];
  31.     int p = (int) pow(2,base_idx);
  32.     comb[0] = 0;
  33.     for(i = 1; i < p; i++){
  34.         comb[0]++;
  35.         sign = pow2(*comb) ? 1 : -1;
  36.         for(j = 0; j < base_idx; j++){
  37.             product *= test_bit(comb, j) ? base[j] : 1;
  38.             tmp = test_bit(comb, j) ? 1 : 0;
  39.         }
  40.         if(!product) printf("ERROR, product 0\n");
  41.         my_sum +=  sign * (c/product);
  42.         product = 1;
  43.     }
  44.     return my_sum;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment