3n+1 문제

가설: 어떤 임의의 자연수를 생각하자. 그 자연수가 짝수면 2로 나누고 홀수면 3배하여 1을 더한다. 그 결과로 얻어진 자연수에 같은 조작을 반복한다. 그럼 언젠가 반드시 1이 된다.

그 문제에 도전하는 C프로그램이다.

#include

#include

long long evenodd(long long);

long long length(long long);

int main(){

long long i,leng,t,keep;

leng=1ll;

keep=1;

i=1000000ll;

while(i){

t=length(i);

if(leng<=t){
leng=t;

keep=i;

}

i–;

}

printf(“%lld has length of %lld\n”,keep,leng);

}

long long evenodd(long long n){

if(n%2ll==0ll){

return n/2ll;

}

else{

return n*3ll+1ll;

}

}

long long length(long long l){

long long leng=1;

long long i=l;

while(i-1){

i=evenodd(i);

leng++;

}

printf(“%lld, %lld\n”,leng,l);

return leng;

}

티스토리 새 관리자에서

티스토리 새 관리자로 전환한지 몇주 된 것 같다.

그동안 쓰면서 편리해진 부분도 있고 불편해진 부분도 있는 것 같은데, UI에서 하나 바뀌었으면 좋겠다고 생각하는 것이 있다.

바로, 글쓰기 화면에서 가장 위에서 두번째 줄에 있는 글 카테고리 정하는 부분이 밑으로 내려와야 한다는 점이다.

글쓰기 화면의 가장 아래 부분에는 파일첨부, 태그, 공개설정, 트랙백, CCL 등 글의 설정을 변경하는 메뉴가 마련되어 있다. 그런데 글의 카테고리를 선택하는 부분만 위에 있다. 사람이 글을 쓸 때 시선의 흐름상 위부터 보게 되므로, 글의 카테고리를 선택하는 부분을 위에 두었다는 것은 카테고리를 먼저 정하고 글을 쓰라는 뜻으로 풀이된다. 하지만 글의 카테고리 역시 글이 갖고 있는 속성의 하나인데 이 부분만 위에 홀로 놓여 있다면 글의 속성을 지정할 때 빼먹고 쓰게 된다.

당장 내가 매번 빼먹고 글을 써서, 글을 저장한 다음에 글 목록에서 카테고리를 변경해주는 일이 너무 많다.

즉, 나의 주장은 카테고리 선택하는 항목이 글쓰기 화면의 아래쪽으로 내려와야 한다고 하는 것이다.

잡상 몇개

1.

방금 꿈이 너무 재밌었다.

보트를 타고 강을 여행했다.

보트가 뒤집히기도 하고, 뭔가 위험한 일이 잔뜩 있었다.

그리고 여행이 끝나고 집으로 돌아와서 그 여행의 이야기를 친구와 가족들에게 해주는 꿈이었다.

그리고나서 꿈이 ƒ渼?

2.

교재의 연습문제 푸는걸 찍어서 웹에 올려볼까 하는 생각이 들었다.

바야흐로 UCC의 시대니까(?).

그걸 영어로 하면 영어 말하기에도 좀 더 도움이 되지 않을까. -_-;

진화론이란?

다윈의진화론 에대해 좀 설명해주세염

과학선생님이 진화에 대해설명하시는대 다윈의 진화론을 이야기하더니

선생님은 그걸 잘 믿지않고 다른사람들도 신빙성이 없다고 말하는대

사실인지도 모르겠고

그 진화론이 어떤지도 모르겠어욤

초5에염;;

어렵게 설명하지좀 말아주세여

진화론은 아주 간단한 법칙에서 시작합니다.

“후손을 많이 남기는 유전자가 살아남는다”

여기서 중요한 것은 “후손”과 “유전자”입니다.

지구에 있는 어떤 생명체든지, 겉모습(표현형)은 그 겉모습을 만들어내는 유전자(유전자형)에 의해서 결정됩니다. 그리고 “후손을 만든다”는
것은 “겉모습”의 결과죠.

여기에 “돌연변이”라는 개념이 양념으로 들어갑니다.

돌연변이는 유전자가 바뀌는 것을 말하는데, 이것은 후손이 생길 때마다 일어날 수 있으며, 유전자가 바뀐 돌연변이는 그 다음 후손으로 계속
전달됩니다. 만약 돌연변이가 굉장히 치명적이어서 아예 살아남는 것 자체를 불가능하게 한다면 그런 돌연변이 유전자는 사라집니다. 하지만 돌연변이가
후손을 남기는데 조금이라도 도움이 된다면 그런 돌연변이 유전자는 후손에게 전달됩니다.

예를들어서, 공작새의 깃털을 살펴보죠.

수컷 공작새의 깃털은 화려할 수록 암컷 공작의 선택을 더 많이 받습니다.

과학자들은 실험을 했는데, 수컷 공작새의 깃털을 아주 화려하게 장식해서, 장식하지 않은 수컷 공작들과 섞어둔 후에, 암컷 공작이 어느 수컷
공작새를 선택하는지 살펴본 것이죠. 그랬더니 화려한 깃털을 가진 수컷 공작을 선택하는 겁니다.

따라서, 깃털을 화려하게 만드는 유전자는 후손을 더 많이 만들 수 있고, 만약 여기에 돌연변이가 일어나서 깃털을 더 화려하게 만들 수
있다면 그 유전자는 더 많이 전달될 겁니다. 반대로 깃털이 덜 화려해지는 돌연변이라면 그 유전자는 덜 전달되겠죠.

하지만 여기에는 “선택압력”이라는 것이 존재합니다. 실험실에서는 공작을 잡아먹을 사람이 아무도 없기 때문에 괜찮지만, 실제 자연에서는
공작을 잡아먹는 동물들은 아주 많이 있죠. 암컷 공작의 눈에 잘 띄인다는 것은 동시에 공작을 잡아먹는 동물들의 눈에도 잘 띄인다는
겁니다.

따라서 깃털을 화려하게 만드는 유전자는 그 후손을 남기기 전에 잡아먹혀서 없어질 가능성이 높아집니다. 물론 반대로 깃털을 덜 화려하게
만드는 유전자는 살아남아서 자손을 퍼트릴 가능성이 생기겠죠.

하나의 유전자에 돌연변이가 생겼을 때, 그 돌연변이가 어느 방향으로 전달될 것인가는 전적으로 외부에서의 선택에 달렸습니다. 시절이 좋고
천적이 적은 때라면 깃털은 점점 화려해질 것이고, 다른 천적들이 많아져서 잡아먹힐 위험이 큰 시대라면 공작의 깃털은 점점 수수해지겠죠. 이것을
“자연선택”이라고 합니다.

유전자는 이러한 돌연변이 속에서 균형을 이루어서 머무르게 됩니다.

하지만 환경이 변하게 되면 진화가 시작됩니다.

사람의 경우, 머리가 점점 좋아지고 서서 걸어다니는 것이 더 유리했기 때문에 머리를 좋게 하는 유전자와 서서 걸어다닐 수 있는 몸을
만들어주는 유전자가 살아남았습니다. 만약 머리가 나쁜 것이 자손을 더 많이 퍼뜨릴 수 있었다면 사람은 머리가 나빠지는 쪽으로 진화했을
겁니다.

절대로 착각해서는 안되는 개념은, 진화라는 것은 항상 더 좋은 쪽으로 변화한다는 것입니다. 하지만 실제로 우리가 “퇴화”라고 부르는 것도
진화의 일종이며, 진화는 항상 우리가 원하는 방향으로 가는 것이 아니라는 겁니다.

우리가 살아있는 화석이라고 부르는 상어는 그 형태와 유전자가 수억년 전부터 거의 변화가 없었기 때문에 화석이라고 부릅니다. 즉, 진화가
거의 일어나지 않았다는 것인데 이것은 상어는 그 자체로 바닷속에서 먹고 사는데 아무런 지장도 없고 유전자를 후손에게 전달하는데 별다른 어려움이
없었기 때문이라는 겁니다.

결론적으로, 진화는 유전자의 변화가 후손에게 전달되고, 그 변화가 점점 누적되어 생김새가 변하게 되는 겁니다.

—–

추가하자면 – 대부분의 과학자들은 진화론이 현재 존재하는 생명의 다양성과 형태를 잘 설명하고 과거에 존재했던 생물과 그 화석에 대해서도 비교적 잘 설명하고 있다고 생각합니다. “다른 사람들도 신빙성이 없다고 말하는데”에서 언급된 다른 사람들은 그 비중이 적습니다. 물론, 생각하는 사람의 수가 적다고 해서 어떤 사실의 참과 거짓이 바뀌지는 않지만, 많은 사람들이 같은 의견을 갖고 있다면 “도대체 왜?”에 대해서 진지하게 고민해 보고, 자신이 믿고 있는 것이 전부 다 오류일 가능성에 대해서도 생각해 보는 자세가 필요합니다. 적어도, 과학을 공부하는 사람이라면 말이죠.

컴퓨터가 무조건 이기는 가위바위보

친구의 부탁으로 만들어 줬다. 뭐…이런거 하면 안되는 거겠지만 -_-;

#include // scanf와 printf를 사용하기 위하여 포함됨

#include // strcpy를 사용하기 위하여 포함됨

#include // exit를 사용하기 위하여 포함됨

int scissor(int); // 컴퓨터의 필승 전략 함수

int printing_choice(int , int ); // 누가 무엇을 골랐는지 알려주는 함수

void winner(int ,int ); // 승자가 누구인지 판정하는 함수

int main(void) // 명령줄 입력값 없음

{

int g;

printf(“Input your choice : “);

scanf(“%d”,&g); // 사람의 선택을 입력받아서 변수 g에 저장한다

printing_choice(1,g); // 사람의 선택 g를 출력한다

printing_choice(2,scissor(g)); // scissor 함수에서 넘겨받은 컴퓨터의 선택을 출력한다

winner(g,scissor(g)); // 사람의 선택과 컴퓨터의 선택을 비교하여 승자를 출력한다

system(“PAUSE”);

return 1; // 프로그램 종료

}

int scissor(int p){

return (p%3)+1;

// 3으로 나눈 나머지에 1을 더하였으므로 이 함수는 1, 2, 3중의 하나를 반환한다.

// 입력값 p보다 항상 1이 크기 때문에 승리 전략이 된다.

}

int printing_choice(int m, int p){

char a[10],b[10];

// 입력받은 값 m이 1이면 사용자의 입력값, 1이 아니면 컴퓨터의 입력값이다.

if(m==1){

strcpy(a,”You”);

}

else {

strcpy(a,”Machine”);

}

// 입력받은 값 p가 3의 배수이면 가위, 3으로 나눈 나머지가 1이면 바위, 3으로 나눈 나머지가 2이면 보자기이다.

if(p%3==0){

strcpy(b,”SCISSOR”);

}

else if(p%3==1){

strcpy(b,”ROCK”);

}

else {

strcpy(b,”PLAIN”);

}

// 누구의 입력값이 무엇인지 출력한다

printf(“%s select %s\n”,a,b);

}

void winner(int p,int q){

char a[10];

// 가위는 보자기에 이긴다. 그리고 보자기는 바위에 이기고 바위는 가위에 이긴다.

if((p%3==0&&q%3==2)||(p%3>q%3)){

strcpy(a,”You win”);

}

if((q%3==0&&p%3==2)||(p%3 strcpy(a,”You lose”);

}

// 만약 값이 같으면 둘은 비긴다.

if(p%3==q%3){

printf(“No one win\n”);

exit(1);

}

// 누가 이겼는지 출력하고 끝낸다.

printf(“%s!\n”);

}

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자리다. 그래서 저걸 다른 언어로 계산하려면 무한 자리수 계산기를 만들어야 한다.

음…

발바닥에 눈썹이 박혔다

예전에 오른손 검지 손톱 밑에 머리카락이 박혔던 이래…

어제 하루종일 왼쪽 발바닥이 따끔거려서 양말을 벗고 살펴봤더니, 발바닥의 굳은살 사이로 눈썹이 박혀 들어가 있었다.

뭐야, 이거.

4년 후에도

4년 후에, 이명박 정부가 국정을 망쳤다고 가정하자. (가정이다. 추측도, 예측도, 사실도 아닌, 단지 가정)

이명박 정부는 노무현 정권 때문에 국정 수행에 차질이 빚어졌다고 말할 것인가?

공인인증 제도에 대한 오픈웹의 입장

*댓글을 달아서 의견을 주시면 오픈웹쪽에도 전달하도록 합니다.*이 글은 CC라이센스에 의해 복사하여 왔습니다.

1. “보편적 역무”

공인인증역무는 전기, 수도, 가스 등과 같은 수준의 공공성과 필수성이 있는 서비스이므로 공급자가 임의로 (자유로운 사업판단에 기하여) 공급을 거부하지 못합니다.

전기사업법 제14조 (“정당한 사유 없이 전기의 공급을 거부하여서는 아니된다”)

수도법 제39조 제1항 (“수돗물의 공급을 원하는 자에게 정당한 이유 없이 그 공급을 거절하여서는 아니 된다”)

전기통신사업법 제3조 제1항 (“정당한 사유 없이 전기통신역무의 제공을 거부하여서는 아니된다”)

도시가스사업법 제19조 (“정당한 사유 없이 … 가스사용자에게 가스의 공급을 거절하거나 공급이 중단되게 하여서는 아니 된다”)

전자서명법 제7조 제1항 (“정당한 사유 없이 인증역무의 제공을 거부하여서는 안된다”)

전자서명법 제15조 제1항 (“공인인증기관은 공인인증서를 발급받고자 하는 자에게 공인인증서를 발급한다”)

2. 금융결제원은 “가입자설비 제공 의무”가 있습니다.

1심 법원도 금결원에게 가입자설비 제공 의무가 있다는 점은 인정하였습니다: “전자서명법 상 공인인증기관의 공인인증역무 제공 업무에는 가입자 설비를 제공할 의무도 포함된다고 할 것이다”(판결서 제8면)

가입자설비가 없으면 인증서를 발급받지도 못하고 사용하지도 못합니다. 따라서 공인인증기관이 가입자설비를 제공하지 않아도 된다는 주장은 근거가 없습니다. 전자서명법령은 가입자설비를 감독관청이 심사하도록 규정하고, 실제로 가입자설비에 대한 심사도 이루어졌습니다.

제공되지 않아도 되는 가입자설비를 심사할 이유는 없습니다.

3. 등록대행기관은 심사받은 가입자 설비를 사용해야 합니다.

가입자설비는 등록대행기관(RA)을 통하여 가입(신청)자에게 배포됩니다. 등록대행기관이 아무 설비나 멋대로 제공해도 된다면, 가입자설비를 심사받도록 정해둔 법규정이 무의미하게 됩니다. 모든 가입자는 등록대행기관을 통하여 배포되는 가입자설비를 사용하여 공인인증서 발급 신청을 하고 있습니다.

공인인증기관은 자신의 공인인증서가 “적법하게 심사받은” 가입자설비를 사용하여 발급되도록 해야 할 의무가 있습니다: “공인인증기관은 공인인증기관 지정시 심사를 받은 시설 및 장비를 이용하여 공인인증업무를 수행하여야 한다.”(전자서명 인증업무 지침 제24조 제1항)

4. 공인인증기관은 ‘이용자(웹서버)’에게 “쉬운 수단”을 제공해야 할 의무가 있습니다.

전자서명법은 ‘가입자’와 ‘이용자’를 구분하고 있습니다. 가입자는 공인인증기관으로부터 인증서를 발급받은 자를 말하며, 가입자와 전자적으로 거래하는 상대방이 ‘이용자’의 지위에 놓이게 됩니다(제25조의 2 및 제26조 참조).

인터넷 상에서 이루어지는 전자서명거래의 경우, ‘이용자’는 웹서버이고, ‘가입자’는 웹서버에 접속하여 전자서명거래를 하는 고객입니다. 흔히 은행, 카드사 등이 이용자(웹서버)의 지위에 있게 되지만, 전자서명거래는 금융거래에만 한정된 것이 아니므로, 어떤 웹서버라도(관공서, 법원, 개인기업, 학교, 개인 블로그 등 무한히 다양한 웹서버들이) ‘이용자’가 될 수 있습니다.

“공인인증”서비스는 말 그대로 모든 이용자가 이용할 수 있어야 하는 서비스 입니다. 따라서 법 제22조의2 제2항은 이용자(웹서버)가 공인인증서에 의하여 일정한 사항을 확인할 수 있도록 “쉬운 수단”을 제공할 의무를 공인인증기관에게 부과하고 있습니다.

가입자설비를 제공하지 않거나, 가입자설비를 이용자(웹서버)가 이용하는데 필요한 정보(이용 방법)을 알려주지 않으면, 이용자(웹서버)가 공인인증서비스를 이용하는데 필요한 “쉬운 수단”이 제공되지 않은 것입니다.

수백, 수천개에 달하는 무수한 이용자(웹서버)가 공인인증용 가입자설비를 제각각 만들어서 사용해야 한다는 금융결제원의 주장은 근거가 없습니다.

5. 파이어폭스 사용자는 국내에도 이미 7% 이상에 이르고 있습니다.

국내의 종합포탈 사이트에 접속하는 사람들의 웹브라우저 분포 비율은 1년 전에 이미 다음과 같은 실정이었습니다:

수도, 가스, 전기 등과 같은 수준의 공공성과 필수성이 있는 공인인증역무를 공인인증기관이 ‘자유로운 사업판단으로’ 인터넷 이용인구의 7%가 넘는 국민들에게 거부해도 무방하다는 주장은 옳지 않습니다.


저작자 표시
비영리
변경 금지