Tính hàm tổng của Euler's


27

Lý lịch

Hàm tổng của Eulerφ(n) được định nghĩa là số lượng các số nguyên nhỏ hơn hoặc bằng số nđó tương đối nguyên tố n, nghĩa là số lượng các giá trị có thể có xtrong 0 < x <= nđó gcd(n, x) == 1. Chúng tôi đã có một vài hàm Ơ-le - liên quan thách thức trước đây, nhưng không bao giờ một trong đó chỉ được tính toán nó.

Ánh xạ của hàm toàn phần lên toàn bộ số là OEIS A000010 .

Thử thách

Cho một số nguyên n > 0, tính toán φ(n). Bạn có thể nhận đầu vào thông qua các đối số dòng lệnh, đầu vào tiêu chuẩn, đối số chức năng hoặc bất cứ điều gì hợp lý. Bạn có thể cung cấp đầu ra thông qua đầu ra tiêu chuẩn, giá trị trả về hoặc bất cứ điều gì hợp lý. Chức năng ẩn danh được chấp nhận. Bạn có thể cho rằng đầu vào sẽ không vượt quá phương thức lưu trữ số nguyên tự nhiên của bạn, ví dụ như inttrong C, nhưng bạn phải hỗ trợ đầu vào tối đa 255. Nếu ngôn ngữ của bạn có chức năng tổng thể tích hợp, bạn không thể sử dụng nó.

Ví dụ

φ(1) => 1
φ(2) => 1
φ(3) => 2
φ(8) => 4
φ(9) => 6
φ(26) => 12
φ(44) => 20
φ(105) => 48

Câu trả lời ngắn nhất trong byte thắng. Nếu ngôn ngữ của bạn sử dụng mã hóa khác với UTF-8, hãy đề cập đến nó trong câu trả lời của bạn.


4
Vâng có này ngày khác. Tôi không nghĩ rằng ứng dụng lặp đi lặp lại tạo ra sự khác biệt đủ, nhưng nếu có bất cứ điều gì tôi sẽ đóng ứng dụng kia, bởi vì tôi cũng không nghĩ rằng ứng dụng lặp lại thêm bất cứ điều gì. Điều đó nói rằng, sự khác biệt lớn hơn là một cái được phép tích hợp và cái này thì không.
Martin Ender

Không cho phép tích hợp rõ ràng không có tác động đến các câu trả lời.
Julie Pelletier

2
@JuliePelletier Tại sao vậy? Câu trả lời Mathicala của tôi nếu không sẽ ngắn hơn 19 byte:EulerPhi
Martin Ender

@JuliePelletier GCD được cho phép vì tính toán GCD không phải là vấn đề dự định sẽ được giải quyết. Chắc chắn, nó có thể tăng số byte trong các câu trả lời này, nhưng nó không làm cho thách thức tốt hơn. Tôi sẽ chỉnh sửa để làm rõ.
bkul

Câu trả lời:


13

Toán học, 27 22 byte

Range@#~GCD~#~Count~1&

Một hàm không tên lấy và trả về một số nguyên.

Không có nhiều điều để giải thích ở đây, ngoại trừ đó @là ký hiệu tiền tố cho các lệnh gọi hàm và ~...~ký hiệu trung gian (liên kết trái), vì vậy, ở trên giống như:

Count[GCD[Range[#], #], 1] &

11

MATL, 7 byte

t:Zd1=s

Bạn có thể dùng thử . Ý tưởng đơn giản nhất, tạo một vectơ 1 đến N và lấy gcd của mỗi phần tử với N ( Zddoes gcd). Sau đó, tìm phần tử nào bằng 1 và tính tổng vectơ để có câu trả lời.


Nội dung _Zpdành cho những người thắc mắc.
David

9

J, 9 byte

(-~:)&.q:

Điều này dựa trên bài tiểu luận của Jsoftware về các hàm tổng.

Cho n = p 1 e 1p 2 e 2 ∙∙∙ p k e k trong đó p k là thừa số của n , hàm tổng số φ ( n ) = φ ( p 1 e 1 ) ∙ φ ( p 2 e 2 ) ∙∙∙ φ ( p k e k ) = ( p 1 - 1) p 1 e 1 - 1 ( p 2 - 1) p 2 e2 - 1 ( p k - 1) p k e k - 1 .

Sử dụng

   f =: (-~:)&.q:
   (,.f"0) 1 2 3 8 9 26 44 105
  1  1
  2  1
  3  2
  8  4
  9  6
 26 12
 44 20
105 48
   f 12345
6576

Giải trình

(-~:)&.q:  Input: integer n
       q:  Prime decomposition. Get the prime factors whose product is n
(   )&     Operate on them
  ~:         Nub-sieve. Create a mask where 1 is the first occurrence
             of a unique value and 0 elsewhere
 -           Subtract elementwise between the prime factors and the mask
     &.q:  Perform the inverse of prime decomposition (Product of the values)

Sử dụng thực tế là totient được nhân lên để tạo ra một giải pháp khác trong J bằng cách sử dụng đệ quy :)
Leaky Nun

@LeakyNun Tôi không nghĩ rằng có một cách dễ dàng để đánh gôn bao thanh toán, vì ngay cả khi sử dụng hình thức lặp cũng [:*/@({.(^-(^<:)){:)2&p:cần 24 byte, thậm chí sử dụng dựng sẵn để lấy số nguyên tố và số mũ của chúng. Hoặc có thể có một cách ngắn hơn và tôi không nhìn thấy nó.
dặm


7

Haskell, 28 byte

f n=sum[1|1<-gcd n<$>[1..n]]

Sử dụng khớp mẫu của Haskell . Các mẹo ở đây khá chuẩn để chơi gôn, nhưng tôi sẽ giải thích cho khán giả nói chung.

Các biểu thức gcd n<$>[1..n]ánh xạ gcd nlên [1..n]. Nói cách khác, nó tính toán gcdvới nmỗi số từ 1đến n:

[gcd n i|i<-[1..n]]

Từ đây, đầu ra mong muốn là số lượng 1mục, nhưng Haskell thiếu một countchức năng. Cách thành ngữ để filterchỉ giữ lại 1và lấy kết quả length, quá lâu để chơi gôn.

Thay vào đó, filterđược mô phỏng bởi một sự hiểu biết danh sách [1|1<-l]với danh sách kết quả l. Thông thường, việc hiểu danh sách liên kết các giá trị với biến như trong [x*x|x<-l], nhưng Haskell cho phép một mẫu được khớp với, trong trường hợp này là hằng số 1.

Vì vậy, [1|1<-l]tạo ra một 1trận đấu trên mỗi trận đấu 1, chỉ trích xuất một cách hiệu quả 1danh sách ban đầu. Gọi sumnó cho chiều dài của nó.


Tôi nghĩ rằng đây là câu trả lời đầu tiên của Haskell mà tôi thực sự hiểu. Đó là một ngôn ngữ tuyệt vời, nhưng nó rất khác với hầu hết những người khác.
bkul

Wow, tôi đã dự đoán rằng việc khớp mẫu phải đầy đủ trong danh sách hiểu. Cảm ơn vì mánh khóe.
Damien


6

Python 2, 44 byte

f=lambda n,d=1:d/n or-f(d)*(n%d<1)-~f(n,d+1)

Ít chơi gôn hơn:

f=lambda n:n-sum(f(d)for d in range(1,n)if n%d<1)

Sử dụng công thức mà các tổng Euler của các ước của ncó tổng n:

nhập mô tả hình ảnh ở đây

Giá trị của ϕ(n)sau đó có thể được tính toán đệ quy bằng cách ntrừ tổng trên các ước số không cần thiết. Thực tế, điều này đang làm đảo ngược Möbius trên chức năng nhận dạng. Tôi đã sử dụng phương pháp tương tự trong một sân golf để tính toán hàm Möbius .

Cảm ơn Dennis vì đã tiết kiệm 1 byte với trường hợp cơ sở tốt hơn, trải đều giá trị ban đầu +nvào +1cho mỗi nvòng lặp, được thực hiện như -~.


5

Python> = 3.5, 76 64 58 byte

Cảm ơn LeakyNun vì đã chơi golf 12 (!).

Cảm ơn Sp3000 vì đã chơi golf 6 byte.

import math
lambda n:sum(math.gcd(n,x)<2for x in range(n))

Tôi thích cách Python có thể đọc được. Điều này có ý nghĩa, thậm chí thông qua các golf.


1
lambda n:sum(gcd(n,x)<2for x in range(n))
Nữ tu bị rò rỉ

Ồ, cuối cùng Python đã thêm vào gcdmô-đun toán học! Tôi không biết điều đó.
rubik

5

Regex (ECMAScript), 131 byte

Ít nhất -12 byte nhờ Deadcode (trong trò chuyện)

(?=((xx+)(?=\2+$)|x+)+)(?=((x*?)(?=\1*$)(?=(\4xx+?)(\5*(?!(xx+)\7+$)\5)?$)(?=((x*)(?=\5\9*$)x)(\8*)$)x*(?=(?=\5$)\1|\5\10)x)+)\10|x

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

Đầu ra là độ dài của trận đấu.

Các biểu thức ECMAScript làm cho nó cực kỳ khó để đếm bất cứ điều gì. Bất kỳ backref nào được xác định bên ngoài một vòng lặp sẽ không đổi trong vòng lặp, mọi backref được xác định bên trong một vòng lặp sẽ được đặt lại khi lặp. Vì vậy, cách duy nhất để mang trạng thái qua các vòng lặp là sử dụng vị trí khớp hiện tại. Đó là một số nguyên duy nhất và nó chỉ có thể giảm (tốt, vị trí tăng, nhưng độ dài của đuôi giảm và đó là những gì chúng ta có thể làm toán học).

Với những hạn chế đó, chỉ đơn giản là đếm số lượng đồng thanh toán dường như là không thể. Thay vào đó, chúng tôi sử dụng công thức của Euler. để tính tổng.

Đây là cách nó trông giống như trong mã giả:

N = input
Z = largest prime factor of N
P = 0

do:
   P = smallest number > P that’s a prime factor of N
   N = N - (N / P)
while P != Z

return N

Có hai điều đáng ngờ về điều này.

Đầu tiên, chúng tôi không lưu dữ liệu đầu vào, chỉ sản phẩm hiện tại, vậy làm thế nào chúng tôi có thể nhận được các yếu tố chính của đầu vào? Thủ thuật là (N - (N / P)) có cùng các thừa số nguyên tố> P như N. Nó có thể đạt được các thừa số nguyên tố mới <P, nhưng dù sao chúng ta cũng bỏ qua các yếu tố đó. Lưu ý rằng điều này chỉ hoạt động bởi vì chúng tôi lặp đi lặp lại các yếu tố chính từ nhỏ nhất đến lớn nhất, đi theo cách khác sẽ thất bại.

Thứ hai, chúng ta phải nhớ hai số trên các lần lặp lặp (P và N, Z không được tính vì nó không đổi) và tôi chỉ nói rằng điều đó là không thể! Rất may, chúng ta có thể làm mờ hai số đó trong một số duy nhất. Lưu ý rằng, khi bắt đầu vòng lặp, N sẽ luôn là bội số của Z, trong khi P sẽ luôn nhỏ hơn Z. Vì vậy, chúng ta chỉ cần nhớ N + P và trích xuất P bằng một modulo.

Đây là mã giả chi tiết hơn một chút:

N = input
Z = largest prime factor of N

do:
   P = N % Z
   N = N - P
   P = smallest number > P that’s a prime factor of N
   N = N - (N / P) + P
while P != Z

return N - Z

Và đây là regex bình luận:

# \1 = largest prime factor of N
# Computed by repeatedly dividing N by its smallest factor
(?= ( (xx+) (?=\2+$) | x+ )+ )

(?=
        # Main loop!
        (
                # \4 = N % \1, N -= \4
                (x*?) (?=\1*$)

                # \5 = next prime factor of N
                (?= (\4xx+?) (\5* (?!(xx+)\7+$) \5)? $ )

                # \8 = N / \5, \9 = \8 - 1, \10 = N - \8
                (?= ((x*) (?=\5\9*$) x) (\8*) $ )

                x*
                (?=
                        # if \5 = \1, break.
                        (?=\5$) \1
                |
                        # else, N = (\5 - 1) + (N - B)
                        \5\10
                )
                x
        )+
) \10

Và như một phần thưởng

Regex (ECMAScript 2018, số lượng trận đấu), 23 byte

x(?<!^\1*(?=\1*$)(x+x))

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

Đầu ra là số lượng trận đấu. ECMAScript 2018 giới thiệu nhìn phía sau có độ dài thay đổi (được đánh giá từ phải sang trái), giúp bạn có thể chỉ cần đếm tất cả các số nguyên tố cùng với đầu vào.

Hóa ra đây là phương pháp độc lập tương tự được sử dụng bởi giải pháp Retina của Leaky Nun và regex thậm chí có cùng độ dài ( và có thể thay thế cho nhau ). Tôi để nó ở đây vì có thể quan tâm rằng phương pháp này hoạt động trong ECMAScript 2018 (và không chỉ .NET).

                        # Implicitly iterate from the input to 0
x                       # Don’t match 0
 (?<!                 ) # Match iff there is no...
                 (x+x)  # integer >= 2...
         (?=\1*$)       # that divides the current number...
     ^\1*               # and also divides the input

4

Perl 6 ,  26 24  22 byte

{[+] (^$^n Xgcd $n) X== 1}
{+grep 2>*,(^$_ Xgcd$_)}
{[+] 2 X>(^$_ Xgcd$_)}

Giải trình:

{
  [+] # reduce using &infix:<+>
    2
    X[>] # crossed compared using &infix:«>»
    (
      ^$_    # up to the input ( excludes input )
      X[gcd] # crossed using &infix:<gcd>
      $_     # the input
    )
}

Thí dụ:

#! /usr/bin/env perl6
use v6.c;

my  = {[+] 2 X>(^$_ Xgcd$_)};

say φ(1) # 1
say φ(2) # 1
say φ(3) # 2
say φ(8) # 4
say φ(9) # 6
say φ(26) # 12
say φ(44) # 20
say φ(105) # 48

say φ 12345 # 6576


4

J, 11 byte

+/@(1=+.)i.

Sử dụng

>> f =: +/@(1=+.)i.
>> f 44
<< 20

>>STDIN ở đâu và <<là STDOUT.

Giải trình

+/ @ ( 1 = +. ) i.
               │
   ┌───────────┴┐
 +/@(1=+.)      i.
   │
 ┌─┼──┐
+/ @ 1=+.
    ┌─┼─┐
    1 = +.

>> (i.) 44            NB. generate range
<< 0 1 2 3 4 ... 43
>> (+.i.) 44          NB. calculate gcd of each with input
<< 44 1 2 1 4 ... 1
>> ((1=+.)i.) 44      NB. then test if each is one (1 if yes, 0 if no)
<< 0 1 0 1 0 ... 1
>> (+/@(1=+.)i.) 44   NB. sum of all the tests
<< 20

Làm thế nào bạn có được đại diện cây dọc? Tôi nghĩ rằng nó chỉ được sản xuất theo chiều ngang.
dặm

@miles Tôi tự gõ nó.
Nữ tu bị rò rỉ

4

Julia, 25 byte

!n=sum(i->gcd(i,n)<2,1:n)

Thật đơn giản - sumchức năng cho phép bạn cung cấp cho nó một chức năng để áp dụng trước khi tính tổng - về cơ bản là tương đương với chạy mapvà sau đó sum. Điều này trực tiếp đếm số lượng số nguyên tố tương đối ít hơn n.


4

Python 2, 57 byte

f=lambda n,k=1,m=1:n*(k>n)or f(n-(n%k<m%k)*n/k,k+1,m*k*k)

Kiểm tra nó trên Ideone .

Lý lịch

Theo công thức sản phẩm của Euler ,

Công thức sản phẩm của Euber

trong đó φ biểu thị hàm tổng của Euler và p chỉ thay đổi theo số nguyên tố.

Để xác định các số nguyên tố, chúng tôi sử dụng một hệ quả của định lý Wilson :

hệ quả của định lý Wilson

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

Tại mọi thời điểm, biến m sẽ bằng bình phương của giai thừa của k - 1 . Trong thực tế, chúng tôi đặt tên đối số mặc định là k = 1m = 0! 2 = 1 .

Miễn là k n , n*(k>n)ước lượng thành 0 và mã sau orđược thực thi.

Nhớ lại rằng m%ksẽ mang lại 1 nếu m là số nguyên tố và 0 nếu không. Điều này có nghĩa là x%k<m%ksẽ mang lại True khi và chỉ khi cả hai k là số nguyên tố và x chia hết cho k .

Trong trường hợp này, (n%k<m%k)*n/kmang lại n / k và trừ nó khỏi n thay thế giá trị trước đó của nó bằng n (1 - 1 / k) , như trong công thức sản phẩm của Euler. Mặt khác, (n%k<m%k)*n/ksản lượng 0n không đổi.

Sau khi tính toán ở trên, chúng ta tăng k và nhân m với giá trị "cũ" của k 2 , do đó duy trì mối quan hệ mong muốn giữa km , sau đó gọi f đệ quy với các đối số được cập nhật.

Khi k vượt quá n , n*(k>n)ước lượng thành n , được trả về bởi hàm.


3

Brachylog , 25 byte

:{:1e.$pdL,?$pd:LcCdC}fl.

Giải trình

Brachylog chưa có GCD tích hợp, vì vậy chúng tôi kiểm tra xem hai số này không có yếu tố chung nào.

  • Vị ngữ chính:

    :{...}fl.             Find all variables which satisfy predicate 1 when given to it as
                          output and with Input as input.
                          Unify the Output with the length of the resulting list
    
  • Vị ngữ 1:

    :1e.                  Unify Output with a number between Input and 1
        $pdL              L is the list of prime factors of Output with no duplicates
            ,
             ?$pd:LcC     C is the concatenation of the list of prime factors of Input with
                          no duplicates and of L
                     dC   C with duplicates removed is still C
    


3

PowerShell v2 +, 72 byte

param($n)1..$n|%{$a=$_;$b=$n;while($b){$a,$b=$b,($a%$b)};$o+=!($a-1)};$o

PowerShell không có chức năng GCD cho nó, vì vậy tôi phải tự lăn.

Cái này nhận đầu vào $n, sau đó dao động từ 1đến $nvà chuyển chúng thành một vòng lặp |%{...}. Mỗi lần lặp chúng tôi đặt hai biến helper $a$bvà sau đó thực hiện một GCD whilevòng lặp. Mỗi lần lặp, chúng tôi đang kiểm tra mà $bvẫn không phải là zero, và sau đó lưu $a%$bvào $bvà giá trị trước đó của $bđể $acho vòng tiếp theo. Sau đó chúng tôi tích lũy xem $acó bằng với 1biến đầu ra của chúng tôi hay không $o. Khi vòng lặp for được thực hiện, chúng tôi đặt $otrên đường ống và đầu ra là ẩn.

Như một ví dụ về cách whilevòng lặp hoạt động, hãy xem xét $n=20và chúng tôi tiếp tục $_=8. Kiểm tra đầu tiên có $b=20, vì vậy chúng tôi nhập vòng lặp. Trước tiên, chúng tôi tính toán $a%$bhoặc 8%20 = 8, được đặt thành $bcùng một lúc 20được đặt thành$a . Kiểm tra 8=0, và chúng tôi nhập lần lặp thứ hai. Sau đó chúng tôi tính toán 20%8 = 4và đặt nó thành $b, sau đó đặt $athành 8. Kiểm tra 4=0, và chúng tôi nhập lần lặp thứ ba. Chúng tôi tính toán 8%4 = 0và đặt nó thành $b, sau đó đặt $athành 4. Kiểm tra 0=0và chúng ta thoát khỏi vòng lặp, vì vậy GCD (8,20)$a = 4. Vì vậy, !($a-1) = !(4-1) = !(3) = 0vì vậy $o += 0và chúng tôi không tính cái đó.


3

Ruby, 32 byte

->n{(1..n).count{|i|i.gcd(n)<2}}

một lambda lấy một số nguyên n và trả về số lượng có bao nhiêu số nguyên trong phạm vi (1..n) là nguyên tố cùng với n.


Xin chào, và chào mừng đến với PPCG! Đây là một bài viết đầu tiên tuyệt vời.
NoOneIsHãy

Chào mừng bạn đến với Câu đố lập trình và Code Golf! Đây là một giải pháp đầu tiên tuyệt vời, hãy tiếp tục!
bkul

Cảm ơn, không thực sự ngắn như vậy, tôi tự hỏi nếu nó có thể cải thiện nó.
Redouane Đỏ


2

Võng mạc, 36 29 byte

7 byte nhờ Martin Ender.

.+
$*
(?!(11+)\1*$(?<=^\1+)).

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

Giải trình

Có hai giai đoạn (lệnh).

Giai đoạn đầu tiên

.+
$*

Nó là một sự thay thế regex đơn giản, chuyển đổi đầu vào thành nhiều cái.

Ví dụ, 5sẽ được chuyển đổi thành 11111.

Giai đoạn thứ hai

(?!(11+)\1*$(?<=^\1+)).

Regex này cố gắng khớp các vị trí thỏa mãn điều kiện (đồng nguyên tố với đầu vào), và sau đó trả về số lượng khớp.


Lookbehind không quay lại trừ khi bên trong một cái nhìn?
Leaky Nun

Nhìn chung không quay trở lại nói chung.
Martin Ender

Vậy thì làm thế nào mà regex đã kiểm tra mọi ước số?
Leaky Nun

1
Vâng, họ sẽ quay lại miễn là bạn không rời bỏ họ. Chừng nào động cơ còn ở bên trong cái nhìn, nó sẽ thử mọi cách có thể để làm cho cái nhìn đó khớp (hoặc thất bại trong trường hợp của cái nhìn tiêu cực). Nhưng một khi cái nhìn được thông qua, động cơ sẽ không quay lại nếu có bất cứ điều gì sau khi nó thất bại (trừ khi nó cũng bắt đầu quay lại mọi thứ ở phía trước của cái nhìn và dù sao cũng phải đánh giá lại mọi thứ).
Martin Ender

2

Lisp thông thường, 58 byte

(defun o(x)(loop for i from 1 to x if (=(gcd x i)1)sum 1))

Đây là một vòng lặp đơn giản, đếm từ 1 đến n đã cho và tăng tổng nếu gcd = 1. Tôi sử dụng tên hàm o vì t là giá trị boolean thực. Không gần như ngắn nhất nhưng khá đơn giản.


CL không có một số loại chức năng ẩn danh?
con mèo

2

MATLAB / Octave, 21 byte

@(n)sum(gcd(n,1:n)<2)

Tạo một hàm ẩn danh có tên ansđược gọi bằng số nguyênn là đầu vào duy nhất:ans(n)

Demo trực tuyến


2

Yếu tố, 50 byte

[ dup iota swap '[ _ gcd nip 1 = ] filter length ]

Làm cho một phạm vi ( iota ) n , và món cà ri n thành một chức năng mà được UCLN xn cho tất cả các giá trị của 0 <= x <= n , kiểm tra nếu kết quả là 1 . Lọc phạm vi ban đầu về việc kết quả của gcd xn có phải1 hay không và lấy phạm vi của nó chiều dài .


[ dup iota swap '[ _ gcd nip 1 = ] map sum ]tiết kiệm 6 byte (tôi nghĩ - không có nhiều kinh nghiệm với Factor).
bkul

@bkul Cảm ơn bạn đã gợi ý! : D Thật không may, không có sự tương thích nào giữa các số và t/f(ký hiệu) trong Yếu tố, vì vậy cách duy nhất để thực hiện sẽ là với [ dup iota swap '[ _ gcd nip 1 = 1 0 ? ] map sum ]độ dài chính xác như giải pháp hiện tại.
mèo

À, dang. Gõ mạnh đánh lại.
bkul

@bkul Chà, tôi rất biết ơn vì đã gõ mạnh và TYPED:trong mã Yếu tố thực : P
mèo




1

JavaScript (ES6), 67 byte

f=n=>[...Array(n)].reduce(r=>r+=g(n,++i)<2,i=0,g=(a,b)=>b?g(b,a%b):a)


1

APL, 7 byte

+/1=⊢∨⍳

Đây là một hàm chức năng đơn âm có một số nguyên ở bên phải. Cách tiếp cận ở đây là một cách rõ ràng: sum ( +/) số lần GCD của đầu vào và các số từ 1 đến đầu vào ( ⊢∨⍳) bằng 1 (1= ).

Hãy thử nó ở đây


1

Haskell, 31 30 byte

\n->sum[1|x<-[1..n],gcd n x<2]

Đã lưu 1 byte, nhờ @Damien.

Chọn các giá trị với gcd = 1, ánh xạ từng giá trị thành 1, sau đó lấy tổng.


Bạn có thể thay thế ==1bằng<2
Damien

1

Hàng loạt, 151 145 144 byte

@echo off
set t=
for /l %%i in (1,1,%1)do call:g %1 %%i
echo %t%
exit/b
:g
set/ag=%1%%%2
if not %g%==0 call:g %2 %g%
if %2%==1 set/at+=1

Chỉnh sửa: Đã lưu 4 byte bằng cách loại bỏ các khoảng trống không cần thiết. Lưu 1 byte bằng cách sử dụng +=. Đã lưu 1 byte bằng cách xóa tnhư +=sẽ giải thích điều đó như 0dù sao. Đã lưu 1 byte nhờ @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ.

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.