Problema #41

Idei de rezolvare pentru problemele de pe projecteuler.net.

Problema #41

Postby Mihai » 12 Jan 2010, 17:56

Enuntul problemei, in limba engleza:
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.
 
What is the largest n-digit pandigital prime that exists?


Cea mai simpla si mai proasta metoda prin care se poate rezolva aceasta problema este sa cautam primul numar mai mic decat 10^9 care respecta proprietatea de a fi pandigital si este, de asemenea, prim. Un astfel de program este extrem de ineficient.
Pentru o rezolvare inteligenta, vom observa ca numerele pandigitale de 9 si respectiv 8 cifre nu pot fi prime! Pentru a demonstra asta, tot ce trebuie sa facem este sa calculam suma cifrelor. Numerele pandigitale de 8 cifre vor avea suma cifrelor 36 (8*9/2), iar cele de 9 cifre, vor avea suma cifrelor 45. Astfel, acestea nu pot fi prime, pentru ca sunt divizibile oricum cu 9 (sau 3).
Acum, numarul cazurilor de la rezolvarea initiala se vor micsora cu foarte mult.
Totusi ... n-ar fi mult mai eficient daca ati putea genera direct numerele pandigitale ? O astfel de rezolvare, bazata pe permutari ale cifrelor, s-ar scrie astfel:

  1. pentru i de la 7 la 1
  2.    //vectorul cifre retine cifrele de la i la 1, inclusiv
  3.    cifre = i,i-1,...1
  4.    executa
  5.       //functia concatenare intoarce numarul format prin concatenarea cifrelor din vectorul primit ca parametru
  6.       numar = concatenare(cifre)
  7.       daca eprim(numar)
  8.           afiseaza(numar)
  9.           opreste executia programului
  10.       sfarsit daca
  11.       //functia permutareaprecedenta intoarce cea mai mare permutare, mai mica decat cea primita ca parametru (din punct de vedere lexicografic)
  12.       cifre = permutareaprecedenta(cifre)
  13.    cat timp cifre!=1,2,...i
  14. precedentul i 


Eu v-am prezentat metoda care am folosit-o, va astept si pe voi ;)!
2p / 1 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Return to Project Euler

Who is online

Users browsing this forum: No registered users and 0 guests