카테고리 보관물: 학술
50자리 수 100개 더하기
원문 : http://projecteuler.net/index.php?section=problems&id=13
100개의 50자리 숫자가 있다. 그 합을 구하여, 그중 왼쪽에서부터 10개 자리의 값을 계산해라.
Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.
37107287533902102798797998220837590246510135740250
46376937677490009712648124896970078050417018260538
74324986199524741059474233309513058123726617309629
91942213363574161572522430563301811072406154908250
23067588207539346171171980310421047513778063246676
89261670696623633820136378418383684178734361726757
28112879812849979408065481931592621691275889832738
44274228917432520321923589422876796487670272189318
47451445736001306439091167216856844588711603153276
70386486105843025439939619828917593665686757934951
62176457141856560629502157223196586755079324193331
64906352462741904929101432445813822663347944758178
92575867718337217661963751590579239728245598838407
58203565325359399008402633568948830189458628227828
80181199384826282014278194139940567587151170094390
35398664372827112653829987240784473053190104293586
86515506006295864861532075273371959191420517255829
71693888707715466499115593487603532921714970056938
54370070576826684624621495650076471787294438377604
53282654108756828443191190634694037855217779295145
36123272525000296071075082563815656710885258350721
45876576172410976447339110607218265236877223636045
17423706905851860660448207621209813287860733969412
81142660418086830619328460811191061556940512689692
51934325451728388641918047049293215058642563049483
62467221648435076201727918039944693004732956340691
15732444386908125794514089057706229429197107928209
55037687525678773091862540744969844508330393682126
18336384825330154686196124348767681297534375946515
80386287592878490201521685554828717201219257766954
78182833757993103614740356856449095527097864797581
16726320100436897842553539920931837441497806860984
48403098129077791799088218795327364475675590848030
87086987551392711854517078544161852424320693150332
59959406895756536782107074926966537676326235447210
69793950679652694742597709739166693763042633987085
41052684708299085211399427365734116182760315001271
65378607361501080857009149939512557028198746004375
35829035317434717326932123578154982629742552737307
94953759765105305946966067683156574377167401875275
88902802571733229619176668713819931811048770190271
25267680276078003013678680992525463401061632866526
36270218540497705585629946580636237993140746255962
24074486908231174977792365466257246923322810917141
91430288197103288597806669760892938638285025333403
34413065578016127815921815005561868836468420090470
23053081172816430487623791969842487255036638784583
11487696932154902810424020138335124462181441773470
63783299490636259666498587618221225225512486764533
67720186971698544312419572409913959008952310058822
95548255300263520781532296796249481641953868218774
76085327132285723110424803456124867697064507995236
37774242535411291684276865538926205024910326572967
23701913275725675285653248258265463092207058596522
29798860272258331913126375147341994889534765745501
18495701454879288984856827726077713721403798879715
38298203783031473527721580348144513491373226651381
34829543829199918180278916522431027392251122869539
40957953066405232632538044100059654939159879593635
29746152185502371307642255121183693803580388584903
41698116222072977186158236678424689157993532961922
62467957194401269043877107275048102390895523597457
23189706772547915061505504953922979530901129967519
86188088225875314529584099251203829009407770775672
11306739708304724483816533873502340845647058077308
82959174767140363198008187129011875491310547126581
97623331044818386269515456334926366572897563400500
42846280183517070527831839425882145521227251250327
55121603546981200581762165212827652751691296897789
32238195734329339946437501907836945765883352399886
75506164965184775180738168837861091527357929701337
62177842752192623401942399639168044983993173312731
32924185707147349566916674687634660915035914677504
99518671430235219628894890102423325116913619626622
73267460800591547471830798392868535206946944540724
76841822524674417161514036427982273348055556214818
97142617910342598647204516893989422179826088076852
87783646182799346313767754307809363333018982642090
10848802521674670883215120185883543223812876952786
71329612474782464538636993009049310363619763878039
62184073572399794223406235393808339651327408011116
66627891981488087797941876876144230030984490851411
60661826293682836764744779239180335110989069790714
85786944089552990653640447425576083659976645795096
66024396409905389607120198219976047599490197230297
64913982680032973156037120041377903785566085089252
16730939319872750275468906903707539413042652315011
94809377245048795150954100921645863754710598436791
78639167021187492431995700641917969777599028300699
15368713711936614952811305876380278410754449733078
40789923115535562561142322423255033685442488917353
44889911501440648020369068063960672322193204149535
41503128880339536053299340368006977710650566631954
81234880673210146739058568557934581403627822703280
82616570773948327592232845941706525094512325230608
22918802058777319719839450180888072429661980811197
77158542502016545090413245809786882778948721859617
72107838435069186155435662884062257473692284509516
20849603980134001723930671666823555245252804609722
53503534226472524250874054075591789781264330331690
포럼 가보니까 C, 파이썬, 루비, 펄, 자바, 어셈블리…
아주 많은 언어들이 이 문제를 푸는데 사용되었다.
나의 풀이 보기
…
쉽다면 쉽고 어렵다면 어려운, 그런 문제였다.
64비트 Unsigned Long 정수를 쓰면 42조까지 표현이 되는데, 그래봐야 12자리다. 그래서 저걸 다른 언어로 계산하려면 무한 자리수 계산기를 만들어야 한다.
음…
i-Pin에 대한 감상
i-Pin을 도입해야 할 것 같다는 시대적 위기의식이 들어서, i-Pin에 대해서 살펴보았다. 그 결과, 이건 좀 이상하다.
일단, i-Pin은 리눅스에서 못 쓸 것 같다. 아무리 봐도 오픈 플랫폼이 아닌 것 같다. 척 보니까 Active X 기반이더만… 5개 업체에서 제공한다고 되어 있는데, 아마 5개 업체 모두가 Active X 기반일 것이라고 추측할 수 있다.
추가 : vno.co.kr 에서 제공하는 서비스는 리눅스에서도 사용 가능하다.
두번째로, 해킹을 통한 개인정보 유출을 최소화 할 수 있다고 하긴 하는데, 어차피 i-Pin만으로 모든 정보를 알아낼 수 있는 건 아니기 때문에 연락처 등의 정보는 따로 받아야 할 것이다. 그렇다면 해킹 당했을 때 가장 중요한 주민등록번호가 유출되지 않는다는 것 뿐이지 개인정보 유출은 막지 못한다.
이를 대비하기 위해서 정보 자체를 암호화 시켜서 저장하는 방법을 제시하고 있는데, 그것은 i-Pin과 관련된 것은 아니고 각 서비스 업체에서 사용하게 되는 것이다.
세번째로, 기존에 이미 유출된 주민등록번호에 대해서는 대처할 방법이 없다는 점이다. 뉴스에 보도된 여러 건의 해킹 사건과, 해킹이 아니더라도 개념없는 웹 사이트 때문에 인터넷에 떠돌아 다니는 개인정보를 생각해 보면 주민등록번호라는 개념 자체가 문제가 발생한다. 즉, 보안성이 없음에도 불구하고 가장 중요한 정보에 접근할 수 있는 숫자인 것이다. 그리고 그 숫자가 이미 유출된 상태다. i-Pin 도입은 소 잃고 외양간을 고치는 수준이 아니다. i-Pin의 도입은, 소를 잃고 외양간을 새로 짓자는 얘긴데, 소는 여전히 소를 잃어버렸던 그 외양간에서 키우자는 얘기다.
그래서. 그다지 매력적인 방법은 아니다. 하지만 도입을 하긴 해야 할 것 같다.
내 생각에는, 분명히 i-Pin 도입 이후에 오픈 플랫폼에 대한 요구가 거세게 일어날 것이다. 지금 현재 오픈웹 소송(
http://www.openweb.or.kr
)은 그저 공인 인증서 사용에 관한 요청이겠지만, 만약 i-Pin이 광역적으로 도입되고 의무화가 된다면 이것은 공인 인증서 사용보다 더 큰 저항에 부딪칠 것이다. OpenID 와 비슷한 기술 수준의 오픈 플랫폼이 아니라면 i-Pin이라는 것에 대한 도입은, 도입 이전에 정보 통신 관련 정책 입안자들의 개념부터 제대로 잡아 놓고 시작해야 할 것이다.
뱀발. 공인 인증서랑 i-Pin은 그 사용 개념과 방법이 동일하다. 언제, 어디서 사용하느냐, 그리고 어디에 저장되느냐가 다를 뿐이다.
뱀밸2. 주민등록번호 클린 캠페인에 참여해 봤는데, 내가 일하는 사이트인 askwhy.co.kr / askhow.co.kr 이 뜨지 않았다. 그리고 내 정보가 도용된 것이 분명한 페르마에듀 닷컴도 뜨지 않았다. 완벽하진 않은 것 같다.
거짓말?
여긴 현실이다!
현실과 환상의 경계에서 보면, 판타지 소설 속의 주인공들은 항상 승리한다. 원래 주인공이 이기는 이야기니까 그렇기도 하거니와, 숨겨둔 필살기라든가 특출난 재능인가 뭔가가 있어서 적이 생각하지 못한 헛점을 찌르고, 그렇게 승리한다.
그건, 적이 멍청한 것이다.
현실의 적은 그렇게 멍청하지 않다.
판타지 소설을 보면, 생명이 아닌 것들, 인간이 아닌 것들이 사람을 공격하고 잡아먹는다.
이건 현실도 마찬가지다. 온갖 도구와 기계들은 사람의 의지에 따라 다른 사람을 공격한다. 자본은 마치 그 실체가 없는 마족처럼 인간을 정신 세계에서부터 파멸시켜 간다. 현실의 마법은 마력이 아니라 자본력으로 승부가 갈린다. 필살기라 할 수 있는 “드래곤 슬레이브” 급의 현금 유동성은 나에게 주어지지 않는다. 금색의 마왕, 로드 오브 나이트 메어의 힘을 빌린 마법 정도를 사용하려면 달러를 찍어낼 수 있는 미국 정도의 돈이 필요하달까나.
판타지 소설은 현실이 아니지만 현실보다 리얼하다.
내가 살고 있는 이 세계에서 살아남기 위해서는, 나 스스로의 생존 방법을 익히는 수밖에 없다. 누구나 마찬가지.
비극으로 가득찰 수밖에 없는 세상은, 내가 지금 겪고 있는 것 쯤은 아무것도 아니겠지. 이기지 않으면 진다. 비기는 건 없고, 도망가는 것도 없는 거다. 어느 분야, 어느 직업이든 그 속에서 인간이 살아남는 방법은 다양하다.
손자 병법에 이르기를, 적이 멍청할 것을 믿을 것이 아니라 나의 준비가 튼튼한 것을 믿어야 한다고 했다. 어떤 적이 나오고 어떤 미래가 다가오더라도 어떻게든 살아남고 어떻게든 이기는 그 무언가의 힘을 준비해 두어야 한다.
꿈을 이루지 못하였을 때 나의 좌절은 얼마나 클 것이며, 그렇게 되지 않기 위해서 얼마나 노력해야 하는가. 그리고 설령 꿈을 이루지 못하였다면 나는 얼마나 실패할 것인가.
세상은 크다. 매우 크다.
지적 생명체의 죽음에 관하여
모 블로거와 토론하다가 들었던 의문점이다.
인간이 아닌 다른 지적 생명체가 존재한다고 하자. 인간이 아닌 것은 확실하다. 하지만 한가지 특징은, 그 지적 생명체는 인간과 의사소통을 할 수 있다. 언어체계가 비슷하든, 통역기를 사용하든, 뭐든 관계는 없지만 아무튼 의사소통이 가능하다고 한다.
그럼, 우리가 이 지적 생명체를 죽이는 것은 윤리적으로 올바르지 않은가?
(올바르지 않은 것을 부정한다면, 그럼 올바른가? 이런 질문이 나올 수도 있다. 이 질문은 별개의 질문이다. 왜냐하면 윤리적인 문제는 아주 나쁜 것에서 아주 좋은 것 까지 다양한 스펙트럼이 존재할 수 있고, 윤리적으로 나쁘면서도 어쩔 수 없는 것도 있고, 좋은 걸 알지만 어쩔 수 없는 경우도 있기 때문이다.)
단, 이때의 윤리학은 최소한 다음과 같은 점은 받아들인다고 하자. 인간은 인간이 아닌 다른 동물들을 죽이고 있으며, 그것은 보편적인 상식으로는 인간이 인간을 죽이는 것 보다는 덜 비난받고 있다.
이것은 어쩌면 현실적인 문제일 수도 있다. 최근의 연구 결과에 의하면, 침팬지에게 수화를 가르쳤더니 자신의 기본적인 욕구를 표현하기 위해서 수화를 꽤 능숙하게 사용하였다는 보고가 있다.
http://animalpark.pe.kr/new2005/column/column_view.php?page=20&s_type=&s_code=&no=66
그런데 인간은 여러가지 의약품의 실험을 위해서 침팬지를 죽이고 있다. 즉, 내가 위에서 문제제기한 상황이 어쩌면 빠른 시일 내에 현실이 될 수도 있다. 물론 나는 동물 보호론자는 아니며, 그렇다고 동물을 죽일 때 아무런 죄책감을 느낄 필요가 없다고 주장하는 사람도 아니다. 이 부분에 있어서는 나의 의견을 제시하지 않는 완전 중립적인 태도다.
답은 어떻게 될까?
과학을 하는 태도라는 건…
13세기의 영국의 수도승이었던 오캄은 이런 말을 했다. “다른 이득이 없다면, 일부러 복잡한 설명을 선택하지 마라.” 이것은 현대 과학에도 그대로 적용되는 논리이다.
최근에, 어떤 블로거와 긴 토론을 하면서, 나 스스로도 내가 진리라고 믿고 있는 것에 대해서 의심을 많이 하였다. 하지만 내가 아는 한 프랙탈 우주론은 일반 상대성 이론이나 양자역학과 비교할 때 무언가를 설명하지는 않는다.
우주가 프랙탈 구조처럼 보인다고 해서, 그것이 진리가 될 수는 없다. 일반 상대성 이론 역시 “관성질량과 중력질량이 동등하다”는 일반 상대성 원리로부터 출발하였다. 만약 그 원리가 진리가 아니라면, 일반 상대성 이론은 틀린 이론이 된다. 하지만, 일반 상대성 이론은 우리가 관찰할 수 있는 많은 것들을 오차 범위 이내에서 정확히 예측하여 왔다. 예를 들어, 수성의 근일점 이동은 뉴턴의 고전 중력 이론이 설명하지 못한 미세한 차이를 좀 더 정확하게 설명하였고, 중력 렌즈 현상과 태양 중력에 의한 별빛의 휘어짐을 설명하였다. 블랙홀의 여러가지 특징도 무사히 설명해 내고 있고, 우주 전체의 진화에 대하여 현재 남아있는 관측적인 근거들을 설명하는 우주 시작에 관한 이론도 일반 상대성 이론에 근거하고 있다. 즉, 일반 상대성 이론은 성공적이다.
하지만 프랙탈 우주론은 그렇지 않다. 프랙탈 우주론은 현재 관찰하고 있는 우주를 해석함에 있어 또다른 해석을 내놓고 있을 뿐, 우리가 관찰할 수 있는 새로운 결과를 예측하거나, 일반 상대성 이론이 해석하지 못하는 결과를 해석하지는 못한다. 또한, 일반 상대성 이론에서 이미 잘 설명된 결과들을 새롭게 설명하지도 않는다. 그냥 그렇게 보인다는 가설에 불과하다. 공부를 아무리 많이 해도 믿기 힘든 노릇이다. 이것은 프랙탈 우주론을 믿는 사람들이 증명해야 하는 부분이다.
나는 대안적인 과학 이론을 내놓는 사람들을 여럿 보아 왔다. 에너지 소모가 없는 공기 엔진을 만들수 있다고 주장하며 열역학 제 2법칙이 틀렸음을 주장하는 사람, 일반 상대성 이론이 오류임을 주장하며 절대성 중력 이론을 주장하는 사람, 창조론이 올바른 진리이고 진화론은 오류라는 사람, 최근에 있었던 제로존 이론까지. 이러한 이론의 특징은, 다른 주류 과학자들이 자신의 연구 결과를 믿고, 그러한 패러다임에 맞춰서 연구를 수행하기를 바란다. 하지만 패러다임이라는 것이 그리 쉽게 바뀌는 것이 아니다. 우선, 앞서 말했듯이, 새로운 과학적 패러다임은 이미 잘 사용되고 있던 과학 이론이 설명하지 못하는 새로운 현상을 설명해야 한다. 또한, 이미 잘 설명되고 있는 현상들 역시 잘 설명해야 한다. 다시말해서, 기존의 과학 이론을 포함해야 한다는 뜻이다.
예를 들어보자. 열역학 제 2법칙이 틀렸고, 공기 중에서 에너지를 뽑아낼 수 있다고 주장하는 사람이 있는데, 그 사람은 어째서 열역학 제 2법칙이 논리적 오류가 있음에도 불구하고 어째서 다른 현상들을 성공적으로 설명하고 있는지는 설명하지 못한다. 만약 논리적 오류가 있다면, 그 이론은 현실에서 설명하지 못하는 현상이 있어야 할텐데, 그런것이 아직 발견되지 않은 것이다. 한걸음 더 나아가, 공기 중에서 에너지를 뽑아낼 수 있다는 현상은 아직 발견되지 않았는데, 오직 발견되지도 않은 현상을 설명하기 위해서 기존에 다른 곳에서 잘 사용되는 이론적 체계 전체를 부정하는 것은 엄청난 도전이다.
창조론 역시 마찬가지이다. 진화론이 논리적으로 오류가 있다면, 진화론의 논리적 체계에 위배되는 증거가 발견되어야 한다. 하지만 적어도 지금까지 발견된 화석 증거와 생물학적 증거들은 진화론의 논리적 체계를 위배하지 않는다. 다시말해서, 진화론은 아직 완벽하게 설명하지 못하는 부분이 있을 뿐이지, 그 자체에 논리적 오류가 있다고 주장하는 것은 무리라는 뜻이다. 더군다나, 창조론은 앞으로 생명체들이 어떻게 변화하여 나갈지, 어떤 일들이 일어날지에 대해서는 아무것도 설명하지 못한다. 또한 종의 멸종이나 종 분화 등을 제대로 설명하고 있지 않다. 이런 구멍투성이 이론을 어떻게 믿을 수 있을까?
과학이란 우리가 사는 이 세상을 설명하는 학문이다. 과학의 발전은 우리가 사는 이 세상을 더 명확하게 설명하고, 더 많은 것을 설명하고, 더 자세히 설명함으로서 이루어진다. 상상력은 중요하다. 아직 일어나지 않은 일, 아직 보지 못한 일, 아직 경험하지 못한 것들을 상상하고 그런 때에 어떤 것들이 필요할지 생각하는 것은 그 자체로도 굉장히 중요한 지적 활동이다. 하지만 그것이 과학으로 발전하기 위해서는, 그런 일들이 우리 세계에서 실제로 일어나고 있는지, 그리고 우리가 세상이라고 믿고 있는 이 현실의 법칙 체계에서 모순되지는 않는지 등을 따져 보아야 한다. 아니면, 그냥 그건 Scientific Fiction이 될 뿐이다.
덧붙여서, 과학은 보편적 이론 체계이기 때문에, 누구나 그 법칙을 실험으로서 재현 가능하거나, 자연에서 관찰할 수 있어야 한다. 재현되지 않으면 검증할 수도 없고, 따라서 과학 이론으로서 인정받을 수는 없다.
정사면체와 정팔면체를 붙이면…
대칭이 되는 숫자인지 판별하기
피보나치 수열
400만 이하의 피보나치 수열 중, 짝수들의 합을 모두 구하라.
1, 2, 3, 5, 8, 13,…
나의 풀이는 접어두었다. 이거 보면 재미가 없어지니까 가급적이면 보지 않고 풀기를 바란다.
http://projecteuler.net/index.php?section=problems&id=2
more..
