marrtins

Deviņciparu skaitlis

Apr 23rd, 2021 (edited)
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.29 KB | None | 0 0
  1. <?php
  2.  
  3. // Deviņciparu skaitlis.
  4. // Skaitlī nav nulles, neviens cipars skaitlī neatkārtojas.
  5.  
  6. // Divi pirmie skaitļa cipari (no kreisās) veido skaitli, kurš dalās ar 2
  7.  
  8. // Trīs pirmie skaitļa cipari (no kreisās) veido skaitli, kurš dalās ar 3
  9. // Četri pirmie skaitļa cipari (no kreisās) veido skaitli, kurš dalās ar 4
  10. // Pieci pirmie skaitļa cipari (no kreisās) veido skaitli, kurš dalās ar 5
  11. // Seši pirmie skaitļa cipari (no kreisās) veido skaitli, kurš dalās ar 6
  12. // Septiņi pirmie skaitļa cipari (no kreisās) veido skaitli, kurš dalās ar 7
  13. // Astoņi pirmie skaitļa cipari (no kreisās) veido skaitli, kurš dalās ar 8
  14. // Visi deviņi skaitļa cipari veido skaitli, kurš dalās ar 9, jeb pats dotais deviņciparu skaitlis dalās ar 9
  15.  
  16. function builda($a){
  17.     $res = 0;
  18.     $b = array_reverse($a);
  19.     array_walk($b, function($i, $k) use(&$res) {
  20.         $res += pow(10, $k) * $i;
  21.     });
  22.     return $res;
  23. }
  24.  
  25. function build1(){
  26.     for ($i = 1; $i <= 9; $i++)
  27.         yield [$i];
  28. }
  29.  
  30. function buildn($n){
  31.     if($n == 1)
  32.         yield from build1();
  33.     else
  34.         foreach (buildn($n - 1) as $a){
  35.             $c = builda($a);
  36.             for ($i = 1; $i <= 9; $i++)
  37.                 if(!(in_array($i, $a) || "$c$i" % $n))
  38.                     yield array_merge($a, [$i]);
  39.         }
  40. }
  41.  
  42. foreach (buildn(9) as $i) {
  43.     print builda($i)."\n";
  44. }
  45.  
Add Comment
Please, Sign In to add comment