n * k = dd0d00d trong đó d = Lôi?


14

Cho số nguyên dương n ≤ 500 :

  • Tìm số nguyên dương k nhỏ nhất sao cho tất cả các chữ số trong biểu diễn thập phân của n * k0 hoặc d , với 1 ≤ d 9 .

  • In hoặc trả lại d trong vòng chưa đầy 30 giây (đọc thêm về điều đó trong phần Làm rõ và quy tắc ).

Ví dụ dễ dàng

Dưới đây là 30 giá trị đầu tiên của d .

+----+-------+---------+---+    +----+-------+---------+---+
|  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 |
+----+-------+---------+---+    +----+-------+---------+---+

Ví dụ không dễ

Một điều đặc biệt của thách thức này là một số giá trị khó tìm hơn nhiều so với các giá trị khác - ít nhất là với cách tiếp cận hoàn toàn vũ phu. Dưới đây là một số ví dụ về n dẫn đến giá trị k cao .

+-----+------------+---------------+---+    +-----+------------+---------------+---+
|   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 |
+-----+------------+---------------+---+    +-----+------------+---------------+---+

Làm rõ và quy tắc

  • n * k sẽ luôn chứa ít nhất một chữ số d , nhưng nó có thể không chứa số 0 nào cả.
  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng. Tuy nhiên, chương trình hoặc chức năng của bạn phải có thể trả về kết quả cho bất kỳ 1 ≤ n ≤ 500 nào trong vòng chưa đầy 30 giây trên phần cứng tầm trung.
  • Hãy nhớ rằng một số giá trị khó tìm thấy hơn những giá trị khác. Một chương trình sẽ cố gắng ép buộc giá trị của k không có khả năng tuân thủ các ràng buộc giới hạn thời gian (một trường hợp thử nghiệm tốt là n = 317 ). Có nhiều phương pháp nhanh hơn đáng kể để tìm d .

Bảng tham khảo

Tất cả các giá trị của d trong 1 ≤ n 500 được liệt kê bên dưới.

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
Lấy cảm hứng lỏng lẻo bởi (nhưng khá khác với) thử thách gần đây này .
Arnauld

n = 6669666 -> d = 9
J42161217

Các đường chéo thú vị trong bảng đó.
James

@James Thật vậy. Các mẫu sẽ xuất hiện rõ ràng hơn một chút bằng cách định dạng MOD 24. Với MOD 25, chúng ta sẽ nhận được một số đường chéo thay thế. :-)
Arnauld

Câu trả lời:


3

Thạch , 16 15 14 byte

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

Thời gian chạy bậc hai (dưới 25 giây trên TIO).

Hãy thử trực tuyến!

Phiên bản thay thế, 15 byte

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

Thời gian chạy liên tục (khoảng 1 giây trên TIO).

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

²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 byte

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;}

Bây giờ trở lại 6cho n=252! Tôi đã thử một cách tiếp cận đệ quy nhưng nó cũng có 83 byte và gặp sự cố với tôi vì những con số khó hơn:

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

Toán học, 103 100 97 byte

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


tìm thấy 317 trong 0,39 giây

Hãy thử trực tuyến sao chép / dán mã, thêm [317] vào cuối và nhấn shift + enter để chạy

-3 byte từ @JungHwan Min
-3 byte từ @Keyu Gan


Bạn có thể thoát khỏi *trong *#, và Tuples[{0,i},13]{0,i}~Tuples~13
Junghwan Min

vâng, tất nhiên rồi
J42161217

Ồ, và một điều nữa: [[1]]ở cuối cũng giống như đặt #&@@ở đầu
JungHwan Min

... Và chúng tôi đã đạt tới 100! cảm ơn vì -3 byte
J42161217

Bạn có thể sử dụng Join@@thay vìFlatten@
Keyu Gan

2

Python 2/3, 129 128 127 byte

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 byte: count(0)count()
-1 byte: ==0<1vì nó không thể âm


2

Thạch , 21 byte

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

Một liên kết đơn âm trả về số HOẶC một chương trình đầy đủ in nó.

Một người tìm kiếm vũ phu trong phạm vi giới hạn chỉ mất chưa đến 20 giây cho bất kỳ 1 ≤ n ≤ 500 nào (dưới 3 giây cho chi phí mã 1 byte - thay thế bằng 13).

Hãy thử trực tuyến!

Làm sao?

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)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.