<?php
declare(strict_types=1);
var_dump(PrimePalindromeFinder::find(1000, 1));
var_dump(PrimePalindromeFinder::find(10, 1));
var_dump(PrimePalindromeFinder::find(500, 400));
var_dump(PrimePalindromeFinder::findStrict(1000, 1));
var_dump(PrimePalindromeFinder::findStrict(10, 1));
try {
var_dump(PrimePalindromeFinder::findStrict(500, 400));
} catch(\Exception $e) {
var_dump($e->getMessage());
}
class PrimePalindromeFinder {
public static function find(int $start, int $end) {
for($i = $start; $i >= $end; $i--) {
if(self::isPalindrome($i) && self::isPrime($i)) {
return $i;
}
}
return false;
}
public static function findStrict(int $start, int $end):int {
for($i = $start; $i >= $end; $i--) {
if(self::isPalindrome($i) && self::isPrime($i)) {
return $i;
}
}
throw new \Exception("No Prime Palindrome found between {$start} and {$end}");
}
private static function isPalindrome(int $number):bool {
$number = strval($number);
for($i = 1; $i <= floor(strlen($number) / 2); $i++) {
$from_start = substr($number, $i - 1, 1);
$from_end = substr($number, $i * -1, 1);
if($from_start !== $from_end) {
return false;
}
}
return true;
}
private static function isPrime(int $number):bool {
if($number == 1) {
return false;
}
if($number == 2) {
return true;
}
if($number % 2 == 0) {
return false;
}
for($i = 3; $i <= ceil(sqrt($number)); $i = $i + 2) {
if($number % $i == 0)
return false;
}
return true;
}
}
preferences:
55.08 ms | 402 KiB | 5 Q