62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php | ||
|  | /* | ||
|  | It was proposed by Christian Goldbach that every odd composite number can be written as the sum of a prime and twice a square. | ||
|  | 
 | ||
|  | 9  = 7  + 2 * 1^2 | ||
|  | 15 = 7  + 2 * 2^2 | ||
|  | 21 = 3  + 2 * 3^2 | ||
|  | 25 = 7  + 2 * 3^2 | ||
|  | 27 = 19 + 2 * 2^2 | ||
|  | 33 = 31 + 2 * 1^2 | ||
|  |   | ||
|  | It turns out that the conjecture was false. | ||
|  | 
 | ||
|  | What is the smallest odd composite that cannot be written as the sum of a prime and twice a square? | ||
|  | */ | ||
|  | 
 | ||
|  | $primes = [2]; | ||
|  | $composites = []; | ||
|  | $twicesquares = []; | ||
|  | 
 | ||
|  | function is_prime(int $n) :bool{for($i=$n**.5|1;$i&&$n%$i--;);return!$i&&$n>1;} | ||
|  | 
 | ||
|  | for ($i= 3; $i<6000; $i += 2) { | ||
|  |     if (is_prime($i)) | ||
|  |     { | ||
|  |         $primes[] = $i; | ||
|  |     } | ||
|  |     else | ||
|  |     { | ||
|  |         $composites[] = $i; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | for($i=1; $i<100; $i++) | ||
|  | { | ||
|  |     $twicesquares[] = 2*($i*$i); | ||
|  | } | ||
|  | 
 | ||
|  | foreach($composites as $composite) | ||
|  | { | ||
|  |     $count = 0; | ||
|  |     foreach($primes as $prime) | ||
|  |     { | ||
|  |         if($prime > $composite) | ||
|  |         { | ||
|  |             break; | ||
|  |         } | ||
|  |         if(in_array($composite-$prime, $twicesquares)) | ||
|  |         { | ||
|  |             $count++; | ||
|  |             break; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     if($count == 0) | ||
|  |     { | ||
|  |         echo "Found $composite\n"; | ||
|  |         die; | ||
|  |     } | ||
|  | } | ||
|  | 
 |