본문 바로가기
etc/쉬운 수학이야기

나르시시스트수 39자리 검증하기

by bigpicture 2021. 7. 12.
반응형

 

 

39자리 나르시시스트 수는 아래와 같습니다. 

 

115132219018763992565095597973971522401

 

먼저 엑셀로 해보려고 했습니만 실패했습니다. 엑셀에서는 최대 15개의 유효숫자만 입력되기 때문입니다. 

 

이렇게 입력을 해도,

 

최대 유효숫자를 제외한 나머지는 0으로 인식합니다.  

 

이번에는 R을 이용해봤습니다. R도 17개까지밖에 유효숫자 입력이 안되는데, 큰 정수를 다루는 패키지가 있었습니다. gmp라는 패키지를 이용하였습니다. 

 

> nar39=as.bigz("115132219018763992565095597973971522401")
> nar39
Big Integer ('bigz') :
[1] 115132219018763992565095597973971522401

 

입력이 잘 됩니다. 각각의 숫자로 쪼개주었습니다. 

 

> nar39s=strsplit(as.character(nar39), "")[[1]]
> nar39s
 [1] "1" "1" "5" "1" "3" "2" "2" "1" "9" "0" "1" "8" "7" "6" "3" "9" "9"
[18] "2" "5" "6" "5" "0" "9" "5" "5" "9" "7" "9" "7" "3" "9" "7" "1" "5"
[35] "2" "2" "4" "0" "1"

 

숫자벡터로 변환해줍니다. 

 

nar39s=as.numeric(nar39s)

 

각각 39제곱을 하고 더해주었습니다.  

 

my_sum=0

for (i in 1:39){
  as.bigz(nar39s[i])^39
  my_sum=my_sum+as.bigz(nar39s[i])^39
}

 

처음 입력한 수에서 빼면 0이 나와야 합니다. 확인해봅시다. 

 

> my_sum-nar39
Big Integer ('bigz') :
[1] 0

 

0이 나옵니다. 검증 완료입니다. 

 

전체 코드는 아래와 같습니다. 

 

nar39=as.bigz("115132219018763992565095597973971522401")

nar39s=strsplit(as.character(nar39), "")[[1]]

nar39s=as.numeric(nar39s)

my_sum=0

for (i in 1:39){
  as.bigz(nar39s[i])^39
  my_sum=my_sum+as.bigz(nar39s[i])^39
}
반응형

댓글