| [ QuizWit ] in KIDS 글 쓴 이(By): parsec ( 먼 소 류 ) 날 짜 (Date): 2002년 5월 23일 목요일 오전 12시 20분 46초 제 목(Title): Re: [문제] Every digit (순환소수 주기 구하는 공식을 필요없이 복잡하게 생각했는데 다시 생각해보니 간단한 것이었음) Cycle[div_,base_]:= Module[{leader,period}, i=0; pb=1; k1=GCD[div,1]; k2=GCD[div,base]; While[k1!=k2, i++; k1=k2; k2=GCD[div,base^(i+1)] ]; leader=i; blist=Transpose[FactorInteger[base]][[1]]; dlist=Transpose[FactorInteger[div]][[1]]; If[Intersection[blist,dlist]==dlist,period=0, x=base^leader; For[i=1,Mod[x*(base^i-1),div]!=0,i++]; period=i ]; Return[{leader,period}] ] (즉 분모를 인수로 갖는 최소의 기수 n 거듭제곱에 대하여 순환하지 않는 자릿수가 n이고, 분모의 소인수 집합이 기수의 소인수 집합에 포함되면 순환소수가 아니며, 그렇지 않은 경우 분수로 나누어 떨어지는 99...(i개)...9000...(n개)...0 에 대해 가장 작은 i 가 순환주기.) 이렇게 순환주기를 구하는 함수를 만든다음 base=10; For[k=1;klist={};ylist={};zlist={}, k<1000, k++, c=Cycle[k,base]; p=c[[2]]; q=c[[1]]; If[p+q>=base,klist=Append[klist,{k,p}]; <---순환하지 않는 부분도 포함 For[i=1,i<k,i++, For[j=1;nlist={},j<=base,j++,x=Mod[Floor[i/k*base^j],base]; If[MemberQ[nlist,x]==False,nlist=Append[nlist,x]]]; If[Length[nlist]==base, ylist=Append[ylist,{k,i,BaseForm[N[i/k,base*2],base]}]; If[GCD[i,k]==1, zlist=Append[zlist,{k,i,BaseForm[N[i/k,base*2],base]}]]] ]]]; zlist= {{38,1,"0.026315789473684210526"},{38,37,"0.9736842105263157895"}, {162,25,"0.15432098765432098765"},{162,41,"0.25308641975308641975"}, {162,73,"0.4506172839506172840"},{162,89,"0.5493827160493827160"}, {162,121,"0.7469135802469135802"},{162,137,"0.8456790123456790123"}, {201,38,"0.18905472636815920398"},{201,163,"0.8109452736318407960"}, {204,65,"0.3186274509803921569"},{204,139,"0.6813725490196078431"}, {235,106,"0.4510638297872340426"},{235,129,"0.5489361702127659574"}, {306,113,"0.3692810457516339869"},{306,145,"0.4738562091503267974"}, {306,161,"0.5261437908496732026"},{306,193,"0.6307189542483660131"}, {311,121,"0.3890675241157556270"},{311,190,"0.6109324758842443730"}, {324,89,"0.27469135802469135802"},{324,235,"0.7253086419753086420"}, {337,5,"0.014836795252225519288"},{337,332,"0.9851632047477744807"}, {342,29,"0.08479532163742690058"},{342,107,"0.31286549707602339181"}, {342,235,"0.6871345029239766082"},{342,313,"0.9152046783625730994"}, {353,13,"0.03682719546742209632"},{353,340,"0.9631728045325779037"}, ... base=16인 경우는 zlist= {{289, 15, 0.0D4985C1FE3A76B2EF2B }, {289, 274, 0.F2B67A3E01C5894D10D }, {450, 43, 0.187654320FEDCBA98765 }, {450, 71, 0.28641FDB97530ECA8642 }, {450, 127, 0.483FB72EA61D950C840 }, {450, 211, 0.78091A2B3C4D5E6F809 }, {450, 239, 0.87F6E5D4C3B2A1907F7 }, {450, 323, 0.B7C048D159E26AF37C0 }, {450, 379, 0.D79BE02468ACF13579C }, {450, 407, 0.E789ABCDF012345678A }, {459, 5, 0.02C9E6581F3BAD749102D }, {459, 454, 0.FD3619A7E0C4528B6F0 }} ... ◇ ~~~_ _ ∴ ~|~| | _/__, SEP. 11. 2001 _ ∴∴ _ ~ | | \ ` Armorica under a tat ,-| `,-,_| |__ | | | A ______|_|__|_|___|__|| | |__|_|_____________________________________ |