Builder

web application developer blog

Project Euler Problem 4: En büyük Palindromik Sayı, PHP ve Python ile Çözüm

Bir palindromik sayı sağdan ve soldan okunduğunda aynıdır. iki basamaklı sayıların çarpımı ile elde edilebilen en büyük palindormik sayı: 9009 = 91 × 99 dır.

3 basamaklıların çarpımı ile elde edilebilen en büyük palindromik sayı kaçtır?

Burada en büyük sayı sorulduğu için döngüyü tersten kurmak daha mantıklı olacaktır. en büyük 3 basamaklı sayı 999. Eğer 999’dan geriye doğru gidersek bulduğumuz ilk palindromik sayı sorunun cevabı olacaktır.

Python İle Çözüm

import string
from datetime import datetime
import math

def isPalindromic(n):
    strn = str(n)
    return strn == strn[::-1]

def main():
    largestPalindrome=0
    number = 0
    for f in range(99,999,-1):
        for n in range(99,999,-1):
            number = n * f
            if isPalindromic(number) and largestPalindrome<number:
                largestPalindrome = number
    print(largestPalindrome)
if __name__ == "__main__":
    startTime = datetime.now()
    main()
    print(datetime.now()-startTime)
906609
00:00:00.000031

Not:

Python ile azalan döngü kurmak için range fonkisyonuna 3.  parametre olarak -1 verilmelidir. Bu her turda 1 azalacak anlamnına gelir.

PHP İle Çözüm

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

function isPalindrome($n){
    return $n == strrev($n);
}
$startTime = microtime_float();
$largestPalindrome=0;
for($f=999; $f>=100; $f--){
    for($n=999; $n>=100; $n--){
        $number = $f*$n;
        if(isPalindrome($number) && $largestPalindrome<$number){
            $largestPalindrome = $number;
        }
    }
}
echo $largestPalindrome."\n";
$executionTime = microtime_float()- $startTime;
echo "Execution Time: ".$executionTime;
906609
Execution Time: 0.86828804016113

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir