Skip to content

Commit f304b1a

Browse files
author
Vincent RÉBISCOUL
committed
Finishing 10539
1 parent 297c6f6 commit f304b1a

File tree

1 file changed

+10
-26
lines changed

1 file changed

+10
-26
lines changed

S5/10539-vrebisco.c

+10-26
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,6 @@ int tab[SIZE];
77
long int *primes = NULL;
88
int nb_primes = 0;
99

10-
long double log_b(long double x, long double b){ /* It computes logarithm in base b */
11-
long double res = (long double)(logl(x)/logl(b));
12-
return res;
13-
}
14-
15-
1610
void count_prime(void){
1711
int i;
1812
for (i = 0; i < SIZE; i++){
@@ -54,35 +48,25 @@ void crible(void){ /* Classical algorithm to find prime numbers */
5448
}
5549
}
5650

57-
long int count_p(long int p, long int low, long int high){ /* count the number of almost prime numbers with divisor p between low and high */
58-
long int m = (long int)ceill(log_b((long double)low, (long double)p)), M = (long int)(log_b((long double)high, (long double)p));
59-
60-
if (M - m < 0){
61-
return 0;
51+
long int count_p(long int p, long int low, long int high){
52+
long int i = 0, l = p*p;
53+
while (l < low){
54+
l *= p;
6255
}
63-
else if (M - m == 0)
64-
return 1;
65-
else
66-
return M - m;
67-
}
68-
69-
long int count_putain(long int p, long int low, long int high){
70-
long int k = 2, i = 0;
71-
while (powl(p,k) < low)
72-
k++;
73-
while (powl(p, k) <= high){
56+
while (l <= high){ /* we just count de p^k in [low,high] */
7457
i++;
75-
k++;
58+
l *= p;
7659
}
7760

7861
return i;
7962
}
8063

8164
long int count(long int low, long int high){
82-
long int i;
65+
long int i = 0;
8366
long int sum = 0;
84-
for (i = 0; i < nb_primes; i++){
85-
sum += count_putain(primes[i], low, high);
67+
while (primes[i]*primes[i] <= high && i < nb_primes){
68+
sum += count_p(primes[i], low, high); /* We count the number of pseudo prime number of the form p^k */
69+
i++;
8670
}
8771

8872
return sum;

0 commit comments

Comments
 (0)