I tried to repeat this results: 27^5 + 84^5 + 110^5 + 133^5 = 144^5 (Lander & Parkin, 1966)and95800^4 + 217519^4 + 414560^4 = 422481^4 (Roger Frye, 1988, 110 hours this is the only counterexample for values below one million)The first counterexample can be found by a direct search in several seconds. The second case takes a day to reach 3000 and will likely take years to find the first counterexample.My program iterates over a set of {a1,a2,a3} such that 1<=a1<=a2<=a3. For each triple it calculates the sum of their 4th powers, extracts 4th power root, bring the integer part to a 4th power yielding the nearestPerfectPower. Whilesum is not equal to nearestPerfectPower I choose the next triple {a1,a2,a3} and repeat the steps.Cases like 1000^4+1^4+1^4<1001^4 slow down the computation and can be removed. I should skip up to  1000^4+1^4+251^4. I might be able to use parity check as well. But even then I don't think I can get the answer fast enough. How should one efficiently search for a1^4+a2^4+a3^4=a4^4?
Euler's sum of powers conjecture. How to efficiently search counterexamples?
algorithms
Why not read Frye's article? Here is a digest. You do need modular arithmetic to sieve candidates. Mod 5 works like charm (200 times reduction of the search space). You need to split it in A^4+B^4 and D^4-C^4. The program itself is written in Lisp.   The implementation is reasonably straightforward, while the underlying math is neat. First He sieves out some numbers using modular arithmetics. Then he studies A^4 + B^4 and D^4 - C^4 turning the problem into O(n^2) First, he notes that mod 5 is very restrictive.A  A^4  A^4 mod 50    0       01    1       12   16       13   81       14  256       1   Hence, a counterexample must satisfy these two requirements:A mod 5 = B mod 5 = 0 //A and B are divisible by 5C^4 mod 5 = D^4 mod 5 = 1 // the reminder of division is 1   Note that D is the largest number and is not divisible by 5, C is not divisible by 5.  A < B, A and B are divisible by 5. This reduce the number of possible pairs by a factor of 200. D must be odd using similar considerations for mod 4.    Mod 9 produces only 4 biquadratic yielding 6 congruences of interest. You gain 1.7 improvement from mod 9; 1.4 improvement from mod 13; 1.4 improvement from 29.If D and C have a common prime factor F then ((AF)^4+(BF)^4 can be eliminated (it was treated earlier). The impact is small, but it helps, nevertheless.Sieving D^4-C^4 is less efficient, but we still can do certain things. First, we can divide it by 625 before decomposition. Let  N  be the number to be decomposed. The second constraint  is  to limit  A,  B  //I copy-pasted the rest of the article. Don't read it if you want to reinvent the implementation.(defun  constrained-search  (L  U)    Find solution  to  A'  +  B'  +  C '  =  D'    with  L  <=  D  <  U.       (decompose-each (constraint-sieve  L  U)))     This first pass function constraint-sieve iterates  on  the  D  variable over the values between  L  andU  which are prime with respect to  10.  For each  D,  it  iterates  on  the  C  variable over the values less thanD  which are in proper modulo  625  correspondence with  D.  When  a  (D,  C)  pair passes both the set ofmodularity tests and the common kctor and prime-factor tests, then the value  N  =  (D'  -  C')/625  isput into  a  list. The lists for each choice of  D  are appended together and returned  as  the vdue of thefunction. Here  is  the code for the first pass function:(defun constraint-sieve  (L  U)Apply modular and factor constraints to  D  and  C.Return list  of  candidates which  pass  tests.(loop  for  D  in  (prime-10  L  U)    append    (loop for  C  in  (good-e-for-d  D)    when (and (mod-ok-p  D  C)    (factor-ok-p  D  C))    collect    (/  (-  (biquad  D)  (biquad  C))    625))))    The second pass function decompose-each takes the list of candidates generated by the first passas  its argument. It iterates  on  the variable  N  over the candidates in the  list.  For each candidate, itcomputes the proper  limits  on  A and iterates between them. When it finds an A such that  N  -  A' isa  biquadrate, it escapes to the outer level and returns some information about the winner. If  a  winneris encountered, another function would be needed to fully identify it. Here  is  the code for the secondpass function:(defun decompose-each (candidates)    Attempt  to  decompose each  of  the candidates.   Return successful decomposition.    (loop with hd-root  =  (biquad-rt  0.5)    for  N  in  candidates   for  a-limit  =  (i-biquad-rt  N)    for  a-min  =  (ceiling  (*  halflroot a-lim't))    do    (loop  for  A from  a-min  below a-limit   when (biquadrate-p  (-  N  (biquad A)))    do    (return-from decompose-each (list  N  A))))))     How many candidates can we expect the first pass to produce?How  many A values does the second  pass  have to scan for the average candidate? Assume that thecandidates are evenly distributed below  U',  then the average upper limit  on  A is about  415.  (U')'/'  =4U/5  and  only  16%  of that range  is  scanned.