First occurrences of square-free gaps

and

an algorithm for their computation


by
Louis Marmet

Updated June 13th, 2007

Abstract:

   This page reports the results of a search for first occurrences of square-free gaps using an algorithm based on the sieve of Eratosthenes.  We write Qgap(L) to denote the starting number of the first gap having exactly the length L.  The following values of Qgap(L) were found since August 1999:
Qgap(10) = 262 315 467 (D. Bernier, August 1999),
Qgap(12) = 47 255 689 915 (L. Marmet, Oct. 19th, 1999),
Qgap(13) = 82 462 576 220 (L. Marmet, Oct. 20th, 1999),
Qgap(14) = 1 043 460 553 364 (L. Marmet, Oct. 25th, 1999),
Qgap(15) = 79 180 770 078 548 (L. Marmet, Nov. 29th, 1999) and
Qgap(16) = 3 215 226 335 143 218 (Z. McGregor-Dorsey, L. Marmet, J. Wetherell, et al., July 22nd, 2000).
Qgap(17) = 23 742 453 640 900 972 (E. Wong, Z. McGregor-Dorsey, L. Marmet, et al., July 8th, 2001).
Qgap(18) = 125 781 000 834 058 568 (L. Marmet, et al., September 9th, 2005).
   No gaps longer than 18 were found up to N = 1.258×1017.

Introduction.  Square-free numbers:

   A number is said to be square-free if its prime decomposition contains no repeated factors.  For example, 30 is square-free since its prime decomposition 2×3×5 contains no repeated factors.  However, 18 is not square-free since the factor 3 appears twice in its prime decomposition 2×3×3.

   The first few square-free numbers give the sequence:
1, 2, 3, 5, 6, 7, 10, 11, 13, 14, 15, 17, 19, 21, 22, 23, 26, 29, 30, 31, 33, 34, 35, 37, 38, 39, 41, 42, 43, 46, 47, 51, 53, 55, 57, 58, 59, 61, 62, 65, 66, 67, 69, 70, 71, 73, 74, 77, 78, 79, 82, 83, 85, 86, 87, 89, 91, 93, 94, 95, 97, etc. (Sloane's A005117)

   More details on square-free numbers can be found at http://mathworld.wolfram.com/Squarefree.html.
(If a square-free number is used as the argument of the Möbius function, a non-zero value (+1 or -1) is obtained.)

Gaps between square-free numbers:

   A square-free gap is a series of L consecutive numbers missing from the sequence of square-free numbers.  The first square-free gap in the sequence of square-free numbers starts at N = 4 and has a length of one.  The next gap starts at N = 8 and has a length L = 2 (since 8 and 9 are non-square-free).  The following table lists the first few gaps and their lengths.
 
Gap starts at N =
 4
 8
12
16
18
20
24
27
32
36
40
44
48
52
54
56
Length of gap L =
 1
 2
1
1
1
1
2
2
1
1
1
2
3
1
1
1

For any L, it can be shown that there exist infinitely many gaps of length greater than L in the sequence of square-free numbers.  Longer lists of square-free gaps and recent results are available here.  These gaps are series of consecutive squareful numbers (Sloane's A013929).
  Note that the term "squarefull" sometimes denotes a positive integer n such that if p is a prime dividing n, then p2 divides n. (See the preprint of Michael Filaseta at http://www.math.sc.edu/~filaseta/paperindex.html, The distribution of squarefull numbers in short intervals, with O. Trifonov, Acta Arith., 67 (1994), 323-333.)

First occurrence of a gap of length L:

   The smallest integer of the first gap having exactly the length L is denoted here as Qgap(L) (Q for "Quadratfrei", or squarefree).  We thus have Qgap(1) = 4, Qgap(2) = 8, Qgap(3) = 48, etc.

   Qgap(L) is listed in the following table for L up to 17.  The third column gives the prime factors that are repeated for each number in the gap.  The values of Qgap(L < 10) and Qgap(11) have been confirmed by different sources (see for example, Sloane's On-Line Encyclopedia of Integer Sequences, sequence A045882).  The sequence Qgap(L) is listed under A051681 in the Encyclopedia of Integer sequences.
 

 L 
 Qgap(L) 
 Repeated prime factors of each number in the gap 
 Gap reported by 




1
 4
 2 
 E. Friedman
2
 8
 2,3 
 E. Friedman 
3
 48
 2,7,5 
 E. Friedman 
4
 242
 11,3,2,7 
 E. Friedman 
5
 844
 2,13,3,11,2 
 E. Friedman 
6
 22 020
 2,19,11,3,2,5 
 E. Friedman 
7
 217 070
 7,3,2,113,11,5,2 
 E. Friedman 
8
 1 092 747
 19,2,7,5,11,2,3,13 
 E. Friedman 
9
 8 870 024
 2,5,11,29,2,7,31,3,2 
 P. De Geest 
10
 262 315 467
 3,2,29,2957,79,2,7,17,5,2×3 
 D. Bernier
11
 221 167 422
 3,31,2,5,37,13,2,7,11,3,2 
 P. De Geest 
12
 47 255 689 915
 7,2,3,103,43,2,29,17,13,2,5,3 
 L. Marmet 
13
 82 462 576 220
 2,3,13,23,2,5,17,41,2,19,3,7,2 
 L. Marmet 
14
 1 043 460 553 364
 2,3,7,19,2,13×59,67,43,2,181,3,5,2,11 
 L. Marmet 
15
 79 180 770 078 548
 2,3,5,29,2,13,17,53,2,19,3,41,2,31,67 
 L. Marmet 
16
 3 215 226 335 143 218
11,23,2,3,269,53,2,5,17,163,2,101,3,19,2,137
 Z. McGregor-Dorsey
17
 23 742 453 640 900 972
2,11×23,127,5,2,3,53,37,2,7,13,17,2,19,3,29,2
 E. Wong
18
[0.79×1017, 1.25781×1017]
? 2,3,37,31,2,19,29,5,2,7×23,3,139,2,11,17,13,2,199 ?
 

Upper limits for Qgap(16) to Qgap(24)

   Erick Bryce Wong (erick a sfu.ca) found upper limits for Qgap(L) for L=16 to 24.  His idea was to find them by prescribing a repeated prime factors for each term and using the Chinese Remainder Theorem (see also this web page) to obtain a number.  More precisely, he prescribed all but five of the moduli and then tested the last moduli, up to the first 1000 primes, to check if the number is squarefree. He tried this over millions of permutations.  His impressive results are:
 
 
Upper limit
 
Qgap(16)
 46 717 595 829 767 167 *
 (Feb. 17th, 2000)
Qgap(17)
 23 742 453 640 900 972 +
 (Feb. 21st, 2000)
Qgap(18)
 125 781 000 834 058 568 
 (June 26th, 2000)
Qgap(19)
 31 310 794 237 768 728 712 
 (July 18th, 2000)
Qgap(20)
 148 372 453 443 663 297 638 331 
 (July 10th, 2000)
Qgap(21)
 321 362 101 382 225 854 472 
 (Feb. 17th, 2000)
Qgap(22)
213 922 449 434 979 698 424 416 
 (Aug. 4th, 2000)
Qgap(23)
687 445 369 966 391 012 821 156 868 
 (July 18th, 2000)
Qgap(24)
 28 548 715 276 566 524 078 226 797 585 011 
 (Sept. 4th, 2000)

* The value of Qgap(16) was found to be 3 215 226 335 143 218 (Z. McGregor-Dorsey, L. Marmet, J. Wetherell, et al., July 22nd, 2000)
+ The value of Qgap(17) was confirmed to be 23 742 453 640 900 972 (E. Wong, Z. McGregor-Dorsey, L. Marmet, et al., July 8th, 2001)

Basic algorithm: the sieve of Eratosthenes

   The square-free gaps can be calculated by finding consecutive numbers that are not square-free.  A simple method to show that N is not square­free is to find a prime factor of N whose square divides N.  By trying every prime up to the square root of N, one can establish whether N is square-free or not.  However, this is a very inefficient way to test billions of numbers.

   A faster algorithm is used by "Mathematica" to determine if a number is square-free.  The method is quite interesting (see:  http://documents.wolfram.com/v5/Add-onsLinks/StandardPackages/NumberTheory/NumberTheoryFunctions.html )

   However, to determine which of many consecutive numbers are square-free, an algorithm based on to the sieve of Eratosthenes is much faster.  The sieve of Eratosthenes is explained on the web site at http://mathworld.wolfram.com/SieveofEratosthenes.html.  It uses a list of numbers from which each composite number is removed.  Once the process is finished, only the prime numbers are in the list.

   To find the square-free numbers using a sieve, a similar technique is used but the algorithm eliminates numbers that are not square-free.  Starting with a list of integers, first cross out the multiples of 4:
 
1 2 3 X 5 6 7 X 9 10 11 X 13 14 15 X 17 18 19 X 21 22 23 X 25 26 ...    

then the multiples of 9, 25, etc., up to the last number in the list:
 
1 2 3 X 5 6 7 X X 10 11 X 13 14 15 X 17 X 19 X 21 22 23 X X 26 ...    

The remaining numbers are square-free numbers; the gaps are indicated by the series of consecutive "X".

Improvements of the algorithm:

   The following improvements were implemented in a computer program and are presented in the same order they were added to the program.

Improvement I :
Lists of squared-primes and the next non-square-free number use less memory

   To implement this algorithm on a computer, it is not necessary to keep the entire list of integers in memory.  An improvement of the algorithm uses instead two shorter arrays to calculate the next non-square-free number after N:

These arrays will have approximately 2×sqrt(Nmax)/ln(Nmax) elements (see: http://www.utm.edu/research/primes/howmany.shtml).

   To find the square-free gaps, one finds sequences of non-square-free numbers.  The following example shows the arrays used to find gaps starting from N = 20.
(We use the notation used in the programming language C, where the index of an array starts at 0.)
 

Index
i
 
0
1
2
3
4
5
6
7
8
...
Prime squared
p2[i]
 
4
9
25
49
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
24
27
25
49
121
169
289
361
529
...

   Using this table, it is easy to find the next non-square-free number: it is the smallest number in the array nsqf, that is, 24.  We set N = 24 and recalculate the array.  This is easy since the only needed operation is to add the corresponding prime squared to the multiple: 24+4 = 28.  The following table is obtained:
 

Index
i
 
0
1
2
3
4
5
6
7
8
...
Prime squared
p2[i]
 
4
9
25
49
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
28
27
25
49
121
169
289
361
529
...

   Again, the next non-square-free number is the smallest nsqf[i].  By repeating this procedure, N takes the values of all the non-square-free numbers.
   It is advantageous to sort nsqf in increasing order at each step.  This way, the smallest is always nsqf[0].  We set N = 25 and recalculate the array to obtain:
 

Index
i
 
0
1
2
3
4
5
6
7
8
...
Prime squared
p2[i]
 
9
4
49
25
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
27
28
49
50
121
169
289
361
529
...

   The order of the array primesq has also been changed so that each number p2[i] always corresponds to its multiple nsqf[i].  Repeating the procedure will generate the non-square-free numbers N = 27, 28, 32, 36, 40, etc.  Note that special care has to be taken when some numbers in nsqf are equal - each of these has to be increased by the value of its corresponding p2[i].

   The sort is relatively efficient since after nsqf[0] is given its new value, nsqf[1], nsqf[2] and the following elements are still in increasing order.  The new value has to be moved up the array until its proper place is found.

Improvement II :
Many non-square-free numbers can be skipped

   If gaps of a given length Lmin or more are searched, some nsqf[i] can be skipped.  To show this, we first find the minimum number of squared-primes NP2min required in a gap of length L:
 

Gap length L
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 16
17
...
NP2min[L]
 
1
2
3
4
4
5
6
7
7
 7
 8
 9
 9
10
11 12
12
...

For example, if we chose L = 7, we see that NP2min[L] = 6 prime factors are required for Qgap(7) starting at N = 217070 (in this case, the prime factors are 2, 3, 5, 7, 11 and 113).

   Continuing with the example given above, we now specifically search gaps with length Lmin= 7 or longer.  There is no gap of length Lmin= 7 in the interval starting at nsqf[0] and ending at nsqf[5], if nsqf[5] > nsqf[0] + 7. (In general, there is no gap of length Lmin in the interval starting at nsqf[0] and ending at nsqf[NP2min[Lmin-1]], if nsqf[NP2min[Lmin-1]] > nsqf[0] + Lmin.)

   With N = 40, we have:
 

Index
i
 
0
1
2
3
4
5
6
7
8
...
Prime squared
p2[i]
 
4
9
49
25
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
44
45
49
50
121
169
289
361
529
...

   Since nsqf[5] = 169 > nsqf[0] + 7 = 51, there is no gap of length 7 in the interval starting at 44 and ending at 169.  We can therefore safely set N = nsqf[5] - Lmin +1 = 163 and recalculate the following table:
 

Index
i
 
0
1
2
3
4
5
6
7
8
...
Prime squared
p2[i]
 
4
169
9
25
49
121
289
361
529
...
Next non-square-free
nsqf[i]
 
164
169
171
175
196
242
289
361
529
...

This cuts down on the number of non-square-free that have to be tested and the speed of the calculation is increased.  A factor five in speed was obtained when this was implemented in the program which was used to find Qgap(14) and Qgap(15).

Improvement III : (suggested by Joseph Wetherell)
The smallest squared-primes are not needed to calculate the sieve

   This variation on Improvement II turns out to be more efficient, especially when it is combined with Improvements IV and V.  The trick is to consider the smallest squared-primes separately from the large squared-primes.
   Most of the time in the algorithm is spent on the process of taking the smallest elements off of nsqf and sorting them back into the array.  If one can reduce the number of non-square-free numbers which are tested, the speed of the algorithm will improve.
   This is actually possible since the smallest squared-primes are not needed to calculate the sieve.  If we have a gap of, say, L = Lmin = 7 non-square-free numbers, then at least NP2min[7] = 6 different primes are found in the gap.  This means that the smallest k1 = NP2min[Lmin] -1 = 5 squared-primes can be left out of the calculation.  If we search for the 6th squared-prime, every gap of length L = 7 (or more) will be found.
   We therefore separate the small squared-primes from the large ones, creating a base with k1 elements.  The table for N = 163 would now look like this:
 

Index
i
 
0
1
2
3
4
k1
6
7
8
...
Prime squared
p2[i]
 
4
9
25
49
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
--
--
--
--
-- 
169
289
361
529
...

with the base shown in gray.  From the table, one sees that one must test for a gap having Lmin= 7 around N = 169.  If none is found, then nsqf[k1] is increased by 169 and sorted back into the array of large squared-primes to get:
 

Index
i
 
0
1
2
3
4
k1
6
7
8
...
Prime squared
p2[i]
 
4
9
25
49
121
289
169
361
529
...
Next non-square-free
nsqf[i]
 
--
--
--
--
--
289
338
361
529
...

   The sort is faster since it is only done on the large squared-primes.  The process is then continued at N = 289.

Improvement IV : (suggested by Joseph Wetherell)
The values of the small modulos can be computed ahead of time

   To test if there is a gap of Lmin around N, one must still know about multiples of the k1 small squared-primes near N.  This can be done by trial division; even if trial division is slow, it is faster than resorting the base array.  One can also optimize the trial divisions, because the trial divisions for, say, N + 1 and N + 2 are related to each other.  For each small prime p, compute N % p2 and store it in a list mod (the "%" symbol is the modulo function in the C language).  Now to see if p2 divides N + 1, we just test if this stored value is -1 (mod p2).  To see if p2 divides N + 2, we test if this stored value is -2 (mod p2).  (We also precompute the value of -1 (mod p2), -2 (mod p2),  etc.,  for the small set of values which we will possibly need to test.)  Note that it is also necessary to test N - 1, N - 2, etc.  For N = 289, we have the following arrays:
 

Index
i
 
0
1
2
3
4
k1
6
7
8
...
Prime squared
p2[i]
 
4
9
25
49
121
289
169
361
529
...
Next non-square-free
nsqf[i]
 
--
--
--
--
--
289
338
361
529
...
N % p2[i]
mod[i]
1
1
14
44
47





   We see that p2[0] and p2[1] divide N - 1 = 288, but this is the only other non-square-free number for this gap of length 2.  We can therefore increase nsqf[k1] by 289, sort it back into the array (reordering p2 accordingly) and continue with N = 338:
 

Index
i
 
0
1
2
3
4
k1
6
7
8
...
Prime squared
p2[i]
 
4
9
25
49
121
169
361
529
289
...
Next non-square-free
nsqf[i]
 
--
--
--
--
--
338
361
529
578
...
N % p2[i]
mod[i]
2
5
13
44
96
 



Improvement V : (suggested by Joseph Wetherell)
Two large primes-squared that are too far cannot result in a gap

   If we include p2[4] in the array of large squared-primes, (so there are only k2 = NP2min[Lmin] -2 = 4 elements in the base), then we know that a number N = nsqf[k2] we are testing can be part of a gap only if the next number in nsqf is close to N, that is, if nsqf[k2+1] is not larger than N + Lmin-1.  With N = 338, the arrays are now:
 

Index
i
 
0
1
2
3
k2
5
6
7
8
...
Prime squared
p2[i]
 
4
9
25
49
169
361
121
529
289
...
Next non-square-free
nsqf[i]
 
--
--
--
--
338
361
363
529
578
...
N % p2[i]
mod[i]
--
--
--
--






   Since nsqf[k2+1] = 361 is larger than N + Lmin-1 = 344,  we can skip to N = 361.  Since N does not pass the closeness test, we do not have to do any computations with the base, saving us a lot of time.

Improvement VI : (suggested by Joseph Wetherell)
A chained list is faster for the sort

   A chained list can be built with a set of numbers that specify an order for the elements of an array.  If we use a chained list represented by the array called next such that nsqf[next[i]] >= nsqf[i], we can sort the array nsqf without moving any data within tha arrays nsqf or p2.  For a reason that will become obvious later, we choose to have p2 sorted in increasing order.  With N = 361, the arrays would be:
 

Index
i
 
0
1
2
3
k2
5
6
7
8
...
Chained list
next[i]

--
--
--
k2
5
8
9
4
6
...
Prime squared
p2[i]
 
4
9
25
49
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
--
--
--
--
363
507
578
361
529
...
N % p2[i]
mod[i]
1
1
11
18






   We use an additional variable, "head", which points to the smallest item in the array nsqf.  For the table above, we have head = 7 (next[head] is highlighted).  Since we only need to change two values in the array next to perform a sort, this method is faster.  Searching through the array nsqf now consists of going through the data in the following order:

 for (i=head; tempnsqf>=nsqf[next[i]]; i=next[i]) { ... }

   There is another advantage to this method: since the array p2 is sorted in increasing order, we know that if we have to sort item nsqf[i = head], then nsqf[i-1] <= nsqf[i] + p2[i].  This means we can jump immediately to i = head-1 and start searching from there.  In general, this cuts the search in half! Searching through the list now consists of:

  for (i=head-1; tempnsqf>=nsqf[i2=next[i]]; i=i2) { ... }

   We continue the example with the above table.  Since nsqf[next[head]] = 363 is not larger than N + Lmin-1 = 367, we calculated the modulos.  Clearly, there is only a gap of length L = 2 starting at 360.  We therefore set N = 363 and sort tempnsqf = nsqf[head] =nsqf[head] + p2[head] = 722.  We start with i = 6 and the sort requires only one comparison!  The following arrays are obtained:
 

Index
i
 
0
1
2
3
k2
5
6
7
8
...
Chained list
next[i]

--
--
--
k2
5
8
7
9
6
...
Prime squared
p2[i]
 
4
9
25
49
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
--
--
--
--
363
507
578
722
529
...
N % p2[i]
mod[i]
--
--
--
--






with head now equal to 4.

   A factor three in speed was obtained when this algorithm was implemented in the program.

Improvement VII :
Look for the largest spacing between two of three large squared-primes

   Instead of having k2 elements in the base and look for two large squared-primes that are not too far apart, we can use a base with  k3 =NP2min[Lmin] -3 = 3 squared-primes, but look to see if nsqf[head] and nsqf[next[next[head]]] are not more than Lmin apart.
 

Index
i
 
0
1
2
k3
4
5
6
7
8
...
Chained list
next[i]

--
--
k3
5
3
8
7
9
6
...
Prime squared
p2[i]
 
4
9
25
49
121
169
289
361
529
...
Next non-square-free
nsqf[i]
 
--
--
--
392
363
507
578
722
529
...
N % p2[i]
mod[i]
--
--
--







In this example, we look at the difference between nsqf[head] = 363 and nsqf[next[next[head]]] = 507.  Since the difference between the two values is larger than Lmin-1, there is no gap of length Lmin or longer.

   This improvement gives the program a 37% speed increase with Lmin = 14.

   The program becomes slower if four or more large squared-primes are considered (I tested this for L>13, N = 1014  to 1014 +109).

Evaluation of order of algorithm:

   This evaluation applies to the first improvement of the algorithm.  It was found empirically that for a given value of Lmin, the other improvements increased the speed of the calculation by a constant factor.
   To calculate if N is a square-free number, the algorithm takes advantage of the known remainders for N-1.  Each time N is tested, a new non-square-free number is calculated using nsqf[0] = nsqf[0] + p2[0];.  This new value has to be moved up the list to keep nsqf in increasing order.  It is that operation that requires most of the computation time.  To evaluate the speed of the algorithm, it is necessary to find the average number of moves m that will be required to bring the new value nsqf[0] to its correct position in the list, above the number nsqf[m].  This is done by evaluating, for every i, the probability that nsqf[0] > nsqf[i], and then summing over i.

  First, consider the case when p2[0]=4 which occurs with a probability of 1/4.  Since nsqf[0] has been increased by 4, there is a probability of 4/9 that it will have to be moved above nsqf[j] (if p2[j]=9).  There is an additional probability of 4/25 that nsqf[0] will have to be moved above nsqf[k] (if p2[k]=25), etc.  We therefore get the average number of steps required to place the new nsqf[0] to its correct position:

S(1) = 1/4 × (4/9 + 4/25 + 4/49 + 4/121 + ...) = Si=2,... 1/(p2(i))

where p(i) is the ith prime number  (p(1)=2, p(2)=3, p(3)=5, etc.) and p2(i) = p(i)×p(i).

  In the case when p2[0]=9 (which occurs with a probability of 1/9), one move is always necessary to bring nsqf[0] above nsqf[j] (if p2[j]=4).  There is a probability of 9/25 that nsqf[0] will have to be moved above nsqf[k] (if p2[k]=25), etc.  We therefore get:

S(2) = 1/9 × (1 + 9/25 + 9/49 + 9/121 + ...) = 1/(p2(2)) + Si=3,... 1/(p2(i))

  In general, when p2[0]=p2(m), the average number of moves is:

S(m) = (m-1)/(p2(m)) + Si=m+1,... 1/(p2(i))

  The sum over all the S(m) gives the average number of moves required to place nsqf[0] to its correct position in the list:

Sm=1,... S(m) = 2 × Si=2,... (i-1)/(p2(i))

This series converges, as determined with the convergence test 0.224 given in Table of Integrals, Series, and Products by Gradshteyn and Ryzhik (Academic Press, Inc., p. 5).  It converges very slowly to approximately 1.30...  Therefore, given the remainders for N-1, the number of operations required to find out if N is square-free is independent of the value of N.

Acknowledgements:

   Contributed to find Qgap(10): David Bernier.

   Contributed to find Qgap(16): Zach McGregor-Dorsey, Louis Marmet, Joe Wetherell, Gunnard Engebreth, D. Bernier, Erick Wong, Alan Simpson and Nicolas Marmet.

   Contributed to find Qgap(17): E. Wong, Z. McGregor-Dorsey, L. Marmet, Jean-Pierre Bernier, D. Bernier, Nancy Robertson, N. Marmet, Charles Ward and G. Engebreth.

   The search for Qgap(18) is an ongoing team project.  Contributions were made by D. Bernier, L. Marmet, E. Wong, J. Wetherell, Z. McGregor-Dorsey, G. Engebreth, A. Simpson, N. Marmet, N. Robertson, J.-P. Bernier, C.R. Ward, Bruno Le Tual and Horand Gassmann.

   This project started from an idea that was initially suggested to me by David Bernier.

Related web pages:

Selected Preprints of Michael Filaseta.   http://www.math.sc.edu/~filaseta/paperindex.html
-   The distribution of squarefull numbers in short intervals, with O. Trifonov, Acta Arith., 67 (1994), 323-333.
-   On the distribution of gaps between squarefree numbers, Mathematika, 40 (1993), 88-101.
-   On gaps between squarefree numbers II,  with O. Trifonov, Journal of the London Math. Soc. (2), 45 (1992), 215-221.

The Prime Puzzles and Problems Connection.  Carlos Rivera. http://www.primepuzzles.net/problems/prob_028.htm (not updated since Nov. 1999)

B. de Weger and C.E. van de Woestijne, http://www.xs4all.nl/~deweger/publikaties.html
   On the powerfree parts of consecutive integers, Acta Arithmetica 90 [1999], 387 - 395.
 



 

Copyright © 1999  Louis Marmet