도전
n
input where으로 정수가 주어지면 36 >= n >= 2
기본에 몇 개의 Lynch-Bell 숫자가 있는지 출력합니다.n
.
출력은 10 진이어야합니다.
린치 벨 번호
다음과 같은 경우 번호는 Lynch-Bell 번호입니다.
- 모든 숫자는 고유합니다 (숫자 반복 없음)
- 숫자는 각 숫자로 나눌 수 있습니다
- 숫자 중 하나로 0을 포함하지 않습니다.
모든 자릿수는 고유해야하며 각 밑면에 유한 한 한 자릿수 숫자 세트가 있으므로 유한 수의 Lynch-Bell 숫자가 있습니다.
예를 들어, 기수 2에는 Lynch-Bell 번호가 하나만 있습니다. 1
다른 모든 숫자는 숫자를 반복하거나 0을 포함하기 때문입니다.
예
Input > Output
2 > 1
3 > 2
4 > 6
5 > 10
6 > 10
7 > 75
8 > 144
9 > 487
10 > 548
Mathematica Online에는 기본 10 이상의 메모리가 부족합니다. 다음 코드를 사용하여 자체 메모리를 생성 할 수 있습니다.
Do[Print[i," > ",Count[Join@@Permutations/@Rest@Subsets@Range[#-1],x_/;And@@(x\[Divides]FromDigits[x,#])]&[i]],{i,10,36,1}]
승리
바이트 단위의 최단 코드가 이깁니다.
답변
젤리 , 13 바이트
Q⁼g
*`Ṗ©bç"®S
다른 O (n n ) 솔루션.
설명
Q⁼g Helper link. Input: digits (LHS), integer (RHS)
Q Unique (digits)
⁼ Match
g GCD between each digit and the integer
*`Ṗ©bç"®S Main link. Input: integer n
*` Compute n^n
Ṗ Pop, forms the range [1, n^n-1]
© Store previous result in register
b Convert each integer to base n
ç" Call the helper link, vectorized, with
® The register's value
S Sum
답변
답변
자바 222 212 190 바이트
허먼 덕분에 -10 바이트
Kevin 덕분에 -22 바이트
import java.util.*;a->{int c=0,i=1;A:for(;i<Math.pow(a,a);i++){Set g=new HashSet();for(char b:a.toString(i).toCharArray())if(!g.add(b)|b<49||i%a.parseInt(b+"",a)>0)continue A;c++;}return c;}
언 골프 드 :
a -> {
int count = 0;
OUTER:
for (int i = 1; i < Math.pow(a, a); i++) {
Set<Character> found = new HashSet<>();
for (char b : Integer.toString(i, a).toCharArray()) {
if (!found.add(b) || b == 48 || i % Integer.parseInt(b + "", a) != 0) {
continue OUTER;
}
}
count++;
}
return count;
}
많은 수의 경우 매우 느려집니다.
답변
펄 6 , 86 84 77 바이트
Ramillies 덕분에 -2 바이트
->\n{n-1+grep {.Set==$_&&.reduce(* *n+*)%%.all},map {|[X] (1..^n)xx$_},2..^n}
TIO에서 n = 8에서 작동합니다.
답변
실제로 24 바이트
;╗DR⌠╜DR╨i⌡M⌠;╜@¿♀%ΣY⌡MΣ
설명
이 프로그램은 순열 생성과 Lynch-Bell 테스트의 두 가지 주요 부분으로 구성됩니다. 따라서이 설명은 명확성을 위해 각 부분을 개별적으로 살펴볼 것입니다.
순열 생성
입력 : n
(정수[2, 36]
)
출력 : 모든 부분 및 전체 순열 [1, n-1]
( [1, n-1]
길이가에있는 반복없이 값을 포함하는 시퀀스 [1, n-1]
)
;╗DR⌠╜DR╨i⌡M
;╗ store a copy of n in register 0
DR range(1, n)
⌠╜DR╨i⌡M do the following for each element k in range:
╜DR range(1, n)
╨ k-permutations of [1, n-1]
i flatten
린치 벨 테스트
입력 : 기본 n
정수 목록으로, 기본 목록으로 표시됩니다.n
자릿수
출력 : 기본에있는 Lynch-Bell 수 n
⌠;╜@¿♀%ΣY⌡MΣ
⌠;╜@¿♀%ΣY⌡M for each base-n digit list a:
;╜ duplicate a, push n
@¿ convert a from base-n to decimal
♀% modulo a with each of its base-n digits
Σ sum
Y boolean negation (1 if all modulo results are 0, else 0)
Σ sum (count the 1s in the resultant list)
답변
Mathematica, 82 79 76 바이트
Count[Join@@Permutations/@Subsets@Range[#-1],x_/;x==x~FromDigits~#~GCD~x]-1&
답변
05AB1E , 22 바이트
mLIBε0KÙ}ÙvyIöySIö%O_O
O_O
이것이 마침내 작동했을 때도 내 얼굴이었습니다.
<ÝIBJ0Kæ¦Ù€œ˜
실제 답변에서 숫자를 생성하는 데 사용하는 방법보다 빠르지 만 7보다 큰 것은 임의로 작동하지 않습니다 (명백한 이유는 없습니까?)
설명
mLIBε0KÙ}ÙvyIöySIö%O_O # (input = i)
m # Push i^i
L # ...and get a range from one to this value
IB # Map every element to their base i representation
ε } # Map every element to ...
0K # Itself without 0s
Ù # ...and only unique digits
Ù # Uniquify the resulting list
v # For each element...
yIö # Push it converted to base 10
ySIö # Push every digit of it converted to base 10 in a list
% # Calculate the modulo for each digit
O # Sum all results together
_ # Negate: Returns 0 for every positive number and 1 for 0
O # Sum with the rest of the stack (Basically counting all Lynch-Bell-Numbers)
# Implicit print