소인수 분해의 소인


9

나는 PPCG에서 또 다른 주요 도전이 오는 것을 보았고 , 나는 소수를 좋아합니다. 그런 다음 소개 텍스트를 잘못 읽고 창의적 두뇌가 무엇을 생각하는지 궁금했습니다.

제기 된 질문은 사소한 것으로 판명되었지만, 내가 읽은 질문에 대해서도 같은지 궁금합니다.


6은 2 ^ 1 * 3 ^ 1로 나타낼 수 있고 50은 2 ^ 1 * 5 ^ 2로 나타낼 수 있습니다 (여기서 ^는 지수를 나타냄).

당신의 작업 :

이 숫자 표현 에 몇 개의 고유 한 소수가 있는지 판별하는 프로그램 또는 함수를 작성하십시오 .

입력:

1 <n <10 ^ 12 인 정수 n은 일반적인 방법으로 가져옵니다.

산출:

n 의 고유 소수나타내는 데 필요한 고유 소수의 수입니다 .

테스트 사례 :

Input      Factorisation      Unique primes in factorisation representation
24         2^3*3^1            2 (2, 3)
126        2^1*3^2*7^1        3 (2, 3, 7)
8          2^3                2 (2, 3)
64         2^6                1 (2) (6 doesn't get factorised further)
72         2^3*3^2            2 (2, 3)
8640       2^6*3^3*5^1        3 (2, 3, 5)
317011968  2^11*3^5*7^2*13^1  6 (2, 3, 5, 7, 11, 13)
27         3^3                1 (3)

이것은 OEIS 시퀀스가 ​​아닙니다.

채점 :

이것은 바이트 단위의 최저 점수가 승리합니다!


예상되는 결과는 무엇입니까 64? 그것은인가 2 (2,3)(6은 2 * 3으로 표현 될 수있는) 또는 1 (2)(6은 무시)?
Emigna

대한 64예상 결과 (1) (2)이다. 나는 그것을 재귀 적으로 수행한다는 아이디어를 좋아하지만 원래 질문을 읽는 방식이 아닙니다. 8640적절한 테스트 사례 라고 생각 했지만 더 분명해야했습니다. 감사합니다.
pbeentje

이것이 OEIS 시퀀스가 ​​아니라고 주장합니다. (작은) 오메가 기능의 값인 A001221이 아닙니까?
그레이 테일러

A001221도 비슷하지만이 연습에서 지수를 소수로 포함하기 때문에 8 항과 9 항 (여기서는 2, A001221 1)에서 분기되기 시작합니다.
pbeentje

아, 알겠습니다 소인수 분해를 기록한 다음, 내가 한 역할에 관계없이 내가 작성한 소수의 소수를 확인하십시오. 한 걸음 더 나아가 지수를 인수 분해하면 어떻게 될지 궁금합니다.
Gray Taylor

답변:


5

Mathematica, 39 바이트

Count[Union@@FactorInteger@#,_?PrimeQ]&

온라인으로 사용해보십시오!

마틴 엔더 덕분에 (-11 바이트)


CasesSelect(-4 바이트) 보다 짧은 것으로 판명되었습니다 : Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&(새 커널에서 모든 테스트 사례를 통과 함)
JungHwan Min

어때요 Count[Union@@FactorInteger@#,_?PrimeQ]&? (모든 테스트 사례를 확인하지는 않았습니다.)
Martin Ender

@MartinEnder가 작동하는 것처럼 보입니다. 모든 테스트 사례도 통과합니다.
JungHwan Min 2018

5

05AB1E , 9 7 바이트

Kevin Cruijssen 덕분에 2 바이트 절약

ÓsfìÙpO

온라인으로 사용해보십시오!

설명

Ó        # push the prime factor exponents of the input
 sfì     # prepend the prime factors of the input
    Ù    # remove duplicates
     p   # check each if it is prime
      O  # sum

1
사용하여 -1 바이트 €pO주요 요인과 지수를 병합 한 후 :ÓsfìÙ€pO
케빈 Cruijssen

@ KevinCruijssen : 감사합니다! 필요하지 않기 때문에 실제로 2를 절약 합니다.
Emigna

아, 물론 .. 와우, 내가 그것을 어떻게 그리워했는지 모르겠다. haha ​​xD
Kevin Cruijssen



4

가이아 , 6 바이트

ḋ_uṗ¦Σ

온라인으로 사용해보십시오!


  • 소인수 분해를 [prime, exponent] 쌍 으로 계산합니다 .

  • _ 목록을 평평하게합니다.

  • u 중복 요소를 제거합니다.

  • ṗ¦요소 반환을 통해지도 소수가 발견되면 0 , 그렇지 않으면.

  • Σ 목록을 합산합니다.


3

CJam (13 바이트)

{mFe__&:mp1b}

온라인 테스트 스위트

이것은 매우 간단합니다. 다중성을 가진 소수를 얻고, 고유 한 값으로 줄이고, 소수를 필터링하고, 계산하십시오.

슬프게도 Martin 은 원래의 대답에서 약간 흥미로운 흥미로운 트릭으로 처리되지 않은 일부 사례를 지적했지만, 그 이후로 mp제공 0하거나 1필터링하지 않고 매핑 할 수 있음 을 관찰하여 1 바이트 절약을 제공 했습니다.










0

J, 20 바이트

3 :'+/1 p:~.,__ q:y'

손으로 계산하기 때문에 이것이 꺼져 있는지 알려주세요.

골프 제안이 있으십니까?

지루한 제출 : 소인수 분해 표를 평탄화하고 소수를 계산합니다.



0

자바 스크립트 (ES6), 145 바이트

n=>{for(a=[b=l=0],q=n,d=2;q>=2;)q%d?(b&&(a.push(0),l++),d++,b=0):(q/=d,a[l]++,b=1);for(i in a){for(d=1,e=a[i];e%d;d++);e-d||n%e&&l++};return l+1}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.