n * k = dd0d00d nerede d =…?


14

Pozitif bir n tamsayısı n : 500 verildiğinde :

  • Bul en küçük pozitif tam sayı k ondalık temsilinde tüm basamaklar öyle ki n * k ya vardır 0 veya d ile, ≤ d ≤ 9 1 .

  • D öğesini 30 saniyeden daha kısa sürede yazdırın veya geri gönderin ( Açıklamalar ve kurallar bölümünde bunun hakkında daha fazla bilgi edinin ).

Kolay örnekler

İşte d' nin ilk 30 değeri .

+----+-------+---------+---+    +----+-------+---------+---+
|  n |     k |   n * k | d |    |  n |     k |   n * k | d |
+----+-------+---------+---+    +----+-------+---------+---+
|  1 |     1 |       1 | 1 |    | 16 |     5 |      80 | 8 |
|  2 |     1 |       2 | 2 |    | 17 |   653 |   11101 | 1 |
|  3 |     1 |       3 | 3 |    | 18 |     5 |      90 | 9 |
|  4 |     1 |       4 | 4 |    | 19 |   579 |   11001 | 1 |
|  5 |     1 |       5 | 5 |    | 20 |     1 |      20 | 2 |
|  6 |     1 |       6 | 6 |    | 21 |    37 |     777 | 7 |
|  7 |     1 |       7 | 7 |    | 22 |     1 |      22 | 2 |
|  8 |     1 |       8 | 8 |    | 23 |  4787 |  110101 | 1 |
|  9 |     1 |       9 | 9 |    | 24 |    25 |     600 | 6 |
| 10 |     1 |      10 | 1 |    | 25 |     2 |      50 | 5 |
| 11 |     1 |      11 | 1 |    | 26 |    77 |    2002 | 2 |
| 12 |     5 |      60 | 6 |    | 27 |    37 |     999 | 9 |
| 13 |    77 |    1001 | 1 |    | 28 |    25 |     700 | 7 |
| 14 |     5 |      70 | 7 |    | 29 | 37969 | 1101101 | 1 |
| 15 |     2 |      30 | 3 |    | 30 |     1 |      30 | 3 |
+----+-------+---------+---+    +----+-------+---------+---+

O kadar kolay olmayan örnekler

Bu zorluğun bir özelliği, en azından tamamen kaba kuvvet yaklaşımı ile bazı değerlerin diğerlerinden daha zor bulunmasıdır. Aşağıda, k'nin yüksek bir değerine yol açan bazı n örnekleri verilmiştir .

+-----+------------+---------------+---+    +-----+------------+---------------+---+
|   n |          k |         n * k | d |    |   n |          k |         n * k | d |
+-----+------------+---------------+---+    +-----+------------+---------------+---+
|  81 |   12345679 |     999999999 | 9 |    | 324 |   13717421 |    4444444404 | 4 |
| 157 |   64338223 |   10101101011 | 1 |    | 353 |   28615017 |   10101101001 | 1 |
| 162 |   13717421 |    2222222202 | 2 |    | 391 |  281613811 |  110111000101 | 1 |
| 229 |   43668559 |   10000100011 | 1 |    | 405 |   13717421 |    5555555505 | 5 |
| 243 |   13717421 |    3333333303 | 3 |    | 439 |   22781549 |   10001100011 | 1 |
| 283 |   35371417 |   10010111011 | 1 |    | 458 |   43668559 |   20000200022 | 2 |
| 299 |   33478599 |   10010101101 | 1 |    | 471 |   64338223 |   30303303033 | 3 |
| 307 |   32576873 |   10001100011 | 1 |    | 486 |   13717421 |    6666666606 | 6 |
| 314 |   64338223 |   20202202022 | 2 |    | 491 |  203871711 |  100101010101 | 1 |
| 317 | 3154574483 | 1000000111111 | 1 |    | 499 |   22244489 |   11100000011 | 1 |
+-----+------------+---------------+---+    +-----+------------+---------------+---+

Açıklamalar ve kurallar

  • n * k her zaman en az bir basamak d içerir , ancak hiç sıfır içermeyebilir.
  • Bu , bu nedenle bayttaki en kısa kod kazanır. Ancak, program veya fonksiyon herhangi bir sonuç döndürmek gerekir 1 ≤ n ≤ 500 yılında 30 saniyeden az orta menzilli donanım üzerinde.
  • Bazı değerlerin bulunmasının diğerlerinden daha zor olduğunu unutmayın. K değerini kaba kuvvetle zorlamaya çalışan bir programın zaman sınırı kısıtlamasına uyması olası değildir (iyi bir test durumu n = 317'dir ). Bulmak için önemli ölçüde daha hızlı yöntemler vardır d .

Referans tablosu

1 ≤ n ≤ 500 için d'nin tüm değerleri aşağıda listelenmiştir.

n       | d
--------+--------------------------------------------------
001-025 | 1 2 3 4 5 6 7 8 9 1 1 6 1 7 3 8 1 9 1 2 7 2 1 6 5
026-050 | 2 9 7 1 3 1 8 3 2 7 9 1 2 3 4 1 6 1 4 9 2 1 6 7 5
051-075 | 3 4 1 9 5 7 1 2 1 6 1 2 9 8 5 6 1 4 3 7 1 9 1 2 3
076-100 | 4 7 6 1 8 9 2 1 4 5 2 3 8 1 9 1 4 3 2 5 6 1 7 9 1
101-125 | 1 6 1 8 7 2 1 9 1 1 1 7 1 2 5 4 9 2 7 6 1 2 3 4 5
126-150 | 6 1 8 3 1 1 6 7 2 9 8 1 6 1 7 1 2 1 9 5 2 7 4 1 3
151-175 | 1 8 9 7 5 4 1 2 1 8 7 2 1 4 3 2 1 8 1 1 3 4 1 6 7
176-200 | 8 3 2 1 9 1 2 1 8 5 6 1 4 9 1 1 6 1 2 3 7 1 9 1 2
201-225 | 3 2 7 4 5 2 9 8 1 7 1 4 1 2 5 9 7 2 3 2 1 2 1 7 9
226-250 | 2 1 4 1 1 3 8 1 6 5 4 3 7 1 6 1 2 3 4 7 6 1 8 3 5
251-275 | 1 6 1 2 3 8 1 6 7 2 9 2 1 6 5 7 3 4 1 9 1 8 3 2 5
276-300 | 6 1 2 9 7 1 2 1 4 5 2 7 9 1 1 3 4 1 7 5 8 9 2 1 3
301-325 | 7 2 3 8 5 6 1 4 3 1 1 8 1 2 9 4 1 2 1 8 1 7 1 4 5
326-350 | 2 1 8 7 3 1 4 3 2 5 8 1 2 3 2 1 6 1 8 3 2 1 4 1 7
351-375 | 9 8 1 6 5 4 7 2 1 9 1 2 3 4 5 2 1 8 9 1 7 6 1 2 3
376-400 | 8 1 9 1 2 3 2 1 6 7 2 9 4 1 3 1 7 1 2 5 9 1 2 7 4
401-425 | 1 6 1 4 5 2 1 8 1 1 3 4 7 9 5 8 1 2 1 6 1 2 3 8 5
426-450 | 2 7 4 3 1 1 9 1 7 3 4 1 6 1 4 3 2 1 4 5 2 3 7 1 9
451-475 | 1 4 3 2 5 8 1 2 9 2 1 6 1 8 3 2 1 6 7 1 3 8 1 6 5
476-500 | 7 3 2 1 6 1 2 3 4 5 6 1 8 3 7 1 6 1 2 9 8 7 6 1 5

1
Bu son mücadeleden gevşek bir şekilde ilham aldı (ama oldukça farklıydı) .
Arnauld

n = 6669666 -> d = 9
J42161217

Bu tablodaki ilginç köşegenler.
James

@James Gerçekten. MOD 24'ü biçimlendirerek desenler biraz daha net görünecektir. MOD 25 ile bunun yerine bazı köşegenler elde ediyoruz. :-)
Arnauld

Yanıtlar:


3

Jöle , 16 15 14 bayt

²B€Ḍ9×þF%Þ¹ḢQS

İkinci dereceden çalışma süresi (TIO'da 25 saniyenin altında).

Çevrimiçi deneyin!

Alternatif sürüm, 15 bayt

2ȷB€Ḍ9×þF%Þ¹ḢQS

Sabit çalışma süresi (TIO'da yaklaşık 1 saniye).

Çevrimiçi deneyin!

Nasıl çalışır

²B€Ḍ9×þF%Þ¹ḢQS  Main link. Argument: n

²               Take the square of n.
                This bound is high enough for all integers up to 500. 
                In fact, The highest value we need is 1387 for input 471, so
                2000 (2ȷ) is also enough (and a lot faster).

 B€             Binary; convert 1, ..., 4159 to base 2.
   Ḍ            Undecimal; convert each digit array from base 10 to integer.
                This generates the array A of all positive integers up to n²
                whose decimal representations consist entirely of 1's and 0's.
    9×þ         9 multiply table; for each x in A, yield [x, 2x, ..., 8x, 9x].
       F        Flatten; concatenate the resulting arrays, yielding the vector
                V. Note that V contains all numbers that match the regex ^d[0d]*$
                in base 10, in ascending order.
          ¹     Identity; yield n.
        %Þ      Sort the entries for V by their remainders modulo n. This places
                multiples of n at the beginning. The sorting algorithm in stable,
                so the first element of sorted V is the smallest multiple of n.
           Ḣ    Head; extract the first element.
            Q   Unique; deduplicate its digits in base 10. This yields [d, 0].
             S  Take the sum, yielding d.

5

JavaScript (ES6), 83 bayt

n=>{for(p=1;;p=k)for(d=0;d++<9;)for(k=p;k<p+p;k++)if(k.toString(2)*d%n<1)return d;}

Şimdi döndürür 6için n=252! Özyinelemeli bir yaklaşım denedim ama aynı zamanda 83 bayt ve daha zor sayılar için benim için çöküyor:

f=(n,p=1,d=1,k=p)=>k<p+p?k.toString(2)*d%n<1?d:f(n,p,d,k+1):d>8?f(n,p+p):f(n,p,d+1)

4

Mathematica 103 100 97 bayt

#&@@IntegerDigits[Sort[Join@@Table[Cases[FromDigits/@{0,i}~Tuples~13/#,_Integer],{i,9}]][[10]]#]&


0,39 saniyede 317 bulur

Çevrimiçi deneyin kodu kopyalayın / yapıştırın, sonuna [317] ekleyin ve çalıştırmak için shift + enter tuşlarına basın

@JungHwan'dan
-3 bayt @Keyu Gan'dan -3 bayt


Sen kurtulabilirsiniz *in *#ve Tuples[{0,i},13]bir{0,i}~Tuples~13
Junghwan Min

evet, elbette. bitti!
J42161217

Oh, ve bir tane daha: [[1]]sonunda, #&@@başlangıçta koymakla aynı
JungHwan Min

... ve 100'e çıkardık! -3 bayt için teşekkürler
J42161217

Bunun Join@@yerine kullanabilirsinizFlatten@
Keyu Gan

2

Python 2/3, 129 128 127 bayt

from itertools import*
lambda n:next(d for p in count()for d in range(1,10)for k in range(2**p,2*2**p)if d*int(bin(k)[2:])%n<1)

-1 bayt: count(0)count()
-1 bayt: ==0<1negatif olmadığından


2

Jöle , 21 bayt

9Rṭ€0ṗ€⁴ẎḌḍ@Ðf⁸ṢDFḟ0Ḣ

Sayıyı döndüren monadic bir bağlantı VEYA tam bir program yazdırır.

Herhangi bir 1 ≤ n ≤ 500 için 20 saniyeden az süren sınırlı aralıklı bir kaba kuvvet önleyici (1 bayt kod maliyeti için 3 saniyeden az - bununla değiştirin 13).

Çevrimiçi deneyin!

Nasıl?

9Rṭ€0ṗ€⁴ẎḌḍ@Ðf⁸ṢDFḟ0Ḣ - Link: number, n
9R                    - range of 9 = [1,2,3,4,5,6,7,8,9]
  ṭ€0                 - tack €ach to 0 -> [[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9]]
       ⁴              - literal 16
     ṗ€               - Cartesian product for €ach
        Ẏ             - tighten (flatten by 1 level)
         Ḍ            - covert from decimal list to number (vectorises)
              ⁸       - chain's left argument (n)
            Ðf        - filter keep items for which this yields a truthy value:
          ḍ@          -   divisible? with swapped @rguments
               Ṣ      - sort
                D     - convert to decimal list (vectorises)
                 F    - flatten into a single list
                  ḟ0  - filter out zeros
                    Ḣ - head (get the first value)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.