Jeśli 1 nie jest liczony jako czynnik, to
- 40 ma dwa sąsiednie czynniki (4 i 5)
- 1092 ma dwa sąsiednie czynniki (13 i 14)
- 350 nie ma dwóch sąsiednich czynników (spośród czynników 2, 5, 7, 10, 14, 25, 35, 50, 70 i 175, nie ma dwóch kolejnych)
Proporcja liczb całkowitych dodatnich posiadających tę właściwość jest proporcją podzielną przez dowolną z 6 (2 × 3), 12 (3 × 4), 20 (4 × 5), 30, 56,… Jeśli obliczymy tylko proporcję podzielną przez pierwsze n z nich, otrzymamy przybliżenie, które staje się dokładniejsze wraz ze wzrostem n .
Na przykład dla n = 1 znajdujemy proporcję liczb całkowitych podzielną przez 2 × 3 = 6, czyli 1/6. Dla n = 2 wszystkie liczby całkowite podzielne przez 3 × 4 = 12 są również podzielne przez 6, więc przybliżenie wynosi nadal 1/6. Dla n = 3 proporcja liczb całkowitych podzielnych przez 6 lub 20 wynosi 1/5 i tak dalej.
Oto kilka pierwszych wartości:
1 1/6 0.16666666666666666
3 1/5 0.20000000000000000
6 22/105 0.20952380952380953
9 491/2310 0.21255411255411255
12 2153/10010 0.21508491508491510
15 36887/170170 0.21676558735382265
21 65563/301070 0.21776663234463747
24 853883/3913910 0.21816623274423785
27 24796879/113503390 0.21846817967287144
Dla wartości n pomiędzy podanymi wartościami, wynik powinien być taki sam jak wynik dla powyższej wartości (np. N = 5 → 1/5).
Twój program powinien pobrać n i udzielić odpowiedzi ułamkowej lub dziesiętnej. Możesz wziąć n z dowolnym przesunięciem (np. Indeksowanie 0 lub indeksowanie 2 do tej sekwencji, zamiast indeksowania 1).
Aby uzyskać wynik dziesiętny, program musi mieć dokładność co najmniej 5 cyfr dla wszystkich podanych przypadków testowych.
Punktacja to gra w golfa kodowego, w którym wygrywa się najkrótszy kod.
Zainspirowany przez Jaki odsetek dodatnich liczb całkowitych ma dwa czynniki, które różnią się o 1? autor: Marty Cohen, a konkretnie odpowiedź Dana .
Odpowiedzi:
Galaretka ,
14 1310 bajtów-1 wykorzystując pomysł Erika the Outgolfer, aby przyjąć średnią z zer i jedynek.
-3 za pomocą 3-indeksowania (jak dozwolone w pytaniu) - dzięki Dennisowi za zwrócenie na to uwagi.
Monadyczny link akceptujący liczbę całkowitą
n+2
, co daje liczbę zmiennoprzecinkową.(Zaczęło się jako
+2µḊPƝḍⱮ!§T,$Ẉ
przyjmowanien
i ustępowanie[numerator, denominator]
, nieredukowane)W jaki sposób?
źródło
!
zamiastæl/
... Ach, radości z zasad zmieniających się podczas snu.P
aby dostać się do 13 lat?Ẹ€
? Obawiam się, żeP
to samo׃1$
, więc to nie zadziała. (I tak by to było 14 ...) Jeśli zamiastæl/
, może (P
to w końcu LCM * k).æl/
æl/
przypuszczam. (Gra w golfa nocnego ma problemy ...) EDYCJA: Tak, chociaż będę musiał spierać się o TIO do4
...: P05AB1E , 15 bajtów
Port odpowiedzi galaretki @JonathanAllan , więc także bardzo wolno.
Wypróbuj online lub sprawdź trzy pierwsze przypadki testowe .
Wyjaśnienie:
źródło
JavaScript (ES6),
94 9290 bajtówZaoszczędzono 2 bajty dzięki @Shaggy + 2 kolejnych bajtów
Zwraca przybliżenie dziesiętne.
Wypróbuj online!
JavaScript (ES6), 131 bajtów
Wypróbuj online!
źródło
Galaretka , 12 bajtów
Wypróbuj online!
-2 dzięki sugestii Jonathana Allana , aby zastąpić LCM produktem (tj. LCM pomnożonym przez liczbę całkowitą).
Dennis zauważył, że mogę również indeksować 2.
źródło
Węgiel drzewny , 26 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Beznadziejnie nieefektywny (O (n! ²)), więc działa tylko
n=4
na TIO. Wyjaśnienie:Wprowadź
n
i oblicz pierwszen
produkty czynników sąsiednich.Weź iloczyn wszystkich tych czynników i użyj go do obliczenia proporcji liczb mających co najmniej jeden z tych czynników.
30-bajtowa, wolniejsza wersja to tylko O (n!), Więc możesz zrobić to
n=6
na TIO:Wypróbuj online!Link jest do pełnej wersji kodu.
46-bajtowa szybsza wersja to tylko O (lcm (1..n + 2)), więc można to zrobićn=10
na TIO:Wypróbuj online! Link jest do pełnej wersji kodu.45-bajtowa szybsza wersja to tylko O (2ⁿ), więc możesz zrobić to
n=13
na TIO:Wypróbuj online! Link jest do pełnej wersji kodu.
54-bajtowa najszybsza wersja wykorzystuje bardziej wydajny LCM, więc może zrobić to
n=18
na TIO:Wypróbuj online! Link jest do pełnej wersji kodu.
źródło
Wolfram Language (Mathematica) ,
69686152 bajtówWypróbuj online!
3-indeksowane. Na początku miałem zamiar użyć,
LCM@@
ale zdałem sobie sprawę, że#!
będzie krótszy ... ale teraz jest dużo pamięciRange[#!]
...Udało się zagrać w golfa o 2 bajty, co było miłe.
Starsze rozwiązanie numeryczne (56 bajtów):
Wypróbuj online!
2-indeksowane. Bardziej wydajna, gdy
#!>5^8
(#>9
przy założeniu, że#
jest liczbą całkowitą).źródło
Python 2 , 78 bajtów
Wypróbuj online!
Zwraca przybliżoną liczbę dziesiętną do +5 cyfr; stosuje naiwne podejście brutalnej siły, które xnor sugeruje w komentarzach do pytania.
źródło