Liczba sferyczna to liczba, która jest wynikiem dokładnie trzech różnych liczb pierwszych. Pierwsze kilka liczb sferycznych to 30, 42, 66, 70, 78, 102, 105, 110, 114
. Jest to sekwencja A007304 w OEIS.
Twoje zadanie:
Napisz program lub funkcję, aby ustalić, czy wprowadzona liczba całkowita jest liczbą sferyczną.
Wkład:
Liczba całkowita z zakresu od 0 do 10 ^ 9, która może, ale nie musi, być liczbą sferyczną.
Wydajność:
Wartość prawda / fałsz wskazująca, czy dane wejściowe są liczbą sferyczną.
Przykłady:
30 -> true
121 -> false
231 -> true
154 -> true
4 -> false
402 -> true
79 -> false
0 -> false
60 -> false
64 -> false
8 -> false
210 -> false
Punktacja:
To jest code-golf , wygrywa najkrótszy kod w bajtach.
code-golf
number
decision-problem
primes
Gryphon - Przywróć Monikę
źródło
źródło
60
liczba sferyczna?2 × 2 × 3 × 5
60
nie jest liczbą sferyczną. (oczekiwanie na wyjaśnienie PO)Odpowiedzi:
Brachylog ,
63 bajtyWypróbuj online!
Wyjaśnienie
źródło
≠
.Ṫ
.Ṫ
nie jest tak naprawdę wbudowanym predykatem; jest to zmienna wbudowana: lista 3 elementów zmiennych. Jest to dość przydatna zmienna wstępnie ograniczona w wielu różnych wyzwaniach.bash, 43 bajty
Wypróbuj online!
Wprowadzanie za pomocą argumentu wiersza poleceń, danych wyjściowych
0
lub standardowego wyjścia1
.Dość oczywiste; analizuje dane wyjściowe w
factor
celu sprawdzenia, czy pierwszy i drugi czynnik są różne, drugi i trzeci są różne (są posortowane, więc to wystarczy), i są cztery pola (liczba wejściowa i trzy czynniki).źródło
MATL , 7 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
X=
jest najsmutniejszym wbudowanym urządzeniem, jakie kiedykolwiek widziałem.C,
8878126587773 + 4 (lm
) = 77 bajtówNiegolfowane komentarzem wyjaśnienie:
Wypróbuj online!
źródło
i*1.0/l
zamiast obsady, aby się unosić. (A ponieważl
,j
są globalne są inicjowane na 0 za darmo, nie trzeba tego robić, jeśli funkcja jest wywoływana tylko raz Nie wiem, co jest regułą, że..)CJam , 11 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Na podstawie mojej odpowiedzi MATL.
źródło
Galaretki , 8 bajtów
Wypróbuj online!
Wykorzystuje algorytm Luisa Mendo.
Wyjaśnienie:
źródło
Łuska , 6 bajtów
Wypróbuj online!
Zwraca 1 dla liczb sferycznych i 0 w przeciwnym razie.
Wyjaśnienie
W ostatnim fragmencie zgodność między dwiema listami oznacza tę samą długość i taki sam rozkład wartości prawdy / fałszu. W tym przypadku sprawdzamy, czy nasz wynik składa się z dwóch prawdziwych (tj. Niezerowych) wartości.
źródło
Mathematica, 31 bajtów
źródło
PrimeNu
zrobi to równie dobrzePrimeOmega
, i będzie krótszy.Galaretka , 6 bajtów
Wypróbuj online!
Jak to działa
źródło
05AB1E ,
75 bajtówWypróbuj online!
Wykorzystuje algorytm Dennisa.
źródło
Właściwie 7 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Haskell , 59 bajtów
Wypróbuj online!
źródło
J , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Dyalog APL, 26 bajtów
Wypróbuj online!
źródło
Ruby,
814946 bajtówZawiera 6 bajtów dla opcji wiersza poleceń
-rprime
.Wypróbuj online!
źródło
Python 3 ,
5453 bajtówDzięki @xnor za grę w golfa na 1 bajcie!
Wypróbuj online!
źródło
k*k%n
zamiastn%k**2
C,
91102 bajtów, tym razem poprawiony (ponownie), grał w golfa i tym razem przetestował:/ * Działa to również w 93 bajtach, ale ponieważ zapomniałem o standardowych regułach blokujących domyślny typ int dla zmiennych dynamicznych oraz o niedozwoleniu niejawnych wartości zwrotnych bez przypisań, nie zamierzam tego robić:
(Kto powiedział, że wiem coś o C? ;-)
Oto ramka testowa ze skryptem powłoki w komentarzach:
Pożyczyłem poprzednią odpowiedź betsega, aby przejść do mojej wersji.
To jest moja wersja algorytmu betsega, którą grałem w golfa, aby dostać się do mojego rozwiązania:
źródło
[betseg's answer](https://codegolf.stackexchange.com/a/135203/65836)
. Możesz także kliknąć edytuj jego odpowiedź, aby zasugerować edycję, jeśli chcesz, która zawiera wyjaśnienie - bez obietnic, czy zostanie zatwierdzona, czy nie.Pyth, 9 bajtów
Wypróbuj tutaj.
źródło
JavaScript (ES6), 87 bajtów
Przykładowy fragment kodu:
źródło
Python 2 ,
135121 bajtówWypróbuj online!
źródło
Python 2 , 59 bajtów
Wypróbuj online!
źródło
J, 23 bajty
Wypróbuj online!
Obsługa 8 i 0 w zasadzie zrujnowała tę ...
q:
daje ci wszystkie czynniki pierwsze, ale nie radzi sobie z 0. reszta po prostu mówi „unikalne czynniki powinny być równe czynnikom” i „ich liczba powinna wynosić 3”źródło
60
8
.(6=]#@,~.)@q:
jako możliwe rozwiązanieJapt , 14 bajtów
Wypróbuj online!
źródło
Number.k()
, która nie miałaby żadnego efektu, i po prostu sprawdził, czy dane wejściowe mają 3 czynniki pierwsze, a nie 3 różne czynniki pierwsze. Oznaczałoby to8
(z trzema podstawowymi czynnikami :),2, 2, 2
że minął,8
do przypadków testowych z tego powodu.Mathematica, 44 bajty
Wypróbuj online!
źródło
VB.NET (.NET 4.5), 104 bajty
Używam funkcji VB, gdzie nazwa funkcji jest również zmienną. Pod koniec wykonania, ponieważ nie ma instrukcji return, zamiast tego przekaże wartość „funkcji”.
To ostatnie
A=A=3
można wymyślićreturn (A == 3)
w językach opartych na C.Zaczyna się od 2 i iteracyjnie ściąga liczby pierwsze. Ponieważ zaczynam od najmniejszych liczb pierwszych, nie można go podzielić przez liczbę zespoloną.
Spróbuje po raz drugi podzielić przez tę samą liczbę pierwszą. Jeśli tak (np. Jak 60 dzieli się dwa razy przez 2), ustawi liczbę liczb pierwszych na 4 (powyżej maksimum dozwolonego dla liczby sferycznej).
Wypróbuj online!
źródło
Dyalog APL,
514948464543 bajtówWypróbuj online! (zmodyfikowany, aby mógł działać na TryAPL)
Chciałem przesłać taki, który nie opiera się w ogóle na przestrzeni nazw dfns, nawet jeśli jest długi .
źródło
J,
151419 bajtówPoprzednia próba:
3&(=#@~.@q:)~*
Obecna wersja:
(*/*3=#)@~:@q: ::0:
Jak to działa:
Dotyczy to przypadków 0, 8 i 60, których poprzednia wersja nie miała.
źródło
Mathematica,
6657 bajtówDefiniuje anonimową funkcję.
to transpozycja .Wyjaśnienie
FactorInteger
podaje listę par czynników i ich wykładników. NpFactorInteger[2250]=={{2,1},{3,2},{5,3}}
. Zostało to transponowane w celu ułatwienia użytkowania i wprowadzone do funkcjiLength@#1==3&&And@@EqualTo[1]/@#2&
. Pierwsza częśćLength@#1==3
sprawdza, czy istnieją 3 unikalne czynniki, a drugaAnd@@EqualTo[1]/@#2
sprawdza , czy wszystkie wykładniki mają wartość 1.źródło
PHP, 66 bajtów:
Uruchom jako potok z
-nR
lub spróbuj online .Nieskończona pętla dla
0
; włóż$n&&
przed,--$n
aby naprawić.awaria
przykładowy
argument =
30
:czynniki pierwsze są
2
,3
a5
innymi dzielnikami są
1
, 2 * 3 =6
, 2 * 5 =10
i 3 * 5 =15
ich iloczyn:
1*2*3*5*6*10*15
is27000
==30**3
źródło
Python 99 bajtów
Pierwsze zgłoszenie. Wybacz mi, jeśli zrobiłem coś złego. Trochę głupie, liczy liczbę czynników
n
, a następnie liczba razyn
jest podzielna przez każdy (przez dodanie 10 ** 9).Jestem pewien, że istnieje kilka prostych sposobów na odcięcie ~ 10-20 znaków, ale nie zrobiłem tego.
Jest to również niewyobrażalnie wolne przy 10 ** 9. Mogą być wykonane w porządku , zmieniając
'...a+=1\n'*n
się'...a+=1\n'*n**.5
, jak tylko trzeba iść do pierwiastka kwadratowegon
.źródło