[ 掲示板に戻る ]

過去ログ閲覧モード

面積 / an
関数 f(θ)=2cosθ+cosθ g(θ)=2sinθ-sin2θ
曲線C: x=f(θ) y=g(θ) (0≦θ≦π/3)
と定義する。

(1)f(π/3) g(π/3) の値を求めよ
(2)関数f(θ) g(θ) の増減を各々調べよ
(3)点(0,0)と点(f(π/3),g(π/3))を通る直線lの方程式を求めよ
(4)曲線Cと直線lとx軸で囲まれた図形の面積を求めよ

(1)〜(3)まではすんなりいけたのですが...
(4)の解答が
面積の公式より
S=1/2∫[0toπ/3](xdy/dθ-ydx/dθ)dθ-(※)
となっているのですが、これって公式ですか?
(※)以降の計算は分かるのですが、立式が分かりません。

No.4993 - 2009/02/02(Mon) 01:11:43

Re: 面積 / angel
公式と呼んで良いかは分かりませんが…
線分OX1 (X1: (x1,y1)) と OX2 (X2: (x2,y2)) がなす三角形の面積は、1/2・(x1y2-x2y1) です。
※ただし、OX2 の方が、OX1 よりも反時計周りの位置にある場合。逆ならば符号が反転

そうすると、θが?刄ニ変化する前後で、OX ( X:(x,y) ) が通る部分の面積は、x1,y1,x2,y2 の代わりに x,y,(x+?凅),(y+?凉) を適用して、
1/2・(x(y+?凉)-(x+?凅)y)
= 1/2・(x?凉-?凅y)
= 1/2・(x・?凉/?刄ニ-?凅/?刄ニ・y)・?刄ニ
※ただし、OX が反時計周りに動いていく場合。逆周りの場合は符号反転

なので、1/2・∫(x・dy/dθ-dx/dθ・y)dθ という計算で面積が求まることになります。

ただ、これが思いつかなくとも、
・O, (f(π/3),g(π,3)), (f(π/3),0) が作る直角三角形
・f(π/3)〜f(0) の範囲で、曲線Cとx軸に挟まれた部分の面積
の合計と考えれば、
1/2・f(π/3)・g(π/3) + ∫[f(π/3),f(0)] ydx
= 1/2・f(π/3)・g(π/3) + ∫[π/3,0] ydx/dθ・dθ
という計算でも良いです。

No.5033 - 2009/02/04(Wed) 01:57:27
数2 / 真
直線(k+3)x-(2k+1)y+4k-3=0は
kの値に関わらず定点を通ることを示し、
その定点の座標を求めよ。

です。
どうしても解らないので
よろしくお願い致します。

No.4990 - 2009/02/01(Sun) 22:00:09

Re: 数2 / 七
(k+3)x-(2k+1)y+4k-3=0
(x−2y+4)k+(3x−y−3)=0
x−2y+4=0 と 3x−y−3=0 との交点を通ります。

No.4992 - 2009/02/01(Sun) 22:25:32

Re: 数2 / 真
ありがとうございます!
助かりました

No.5019 - 2009/02/03(Tue) 14:19:32
(No Subject) / loof
解答お願いします。
No.4986 - 2009/02/01(Sun) 19:32:50

Re: / rtz
これにしろ下にしろ、
ご丁寧にヒントが書いてあるのですから、
その通りにやればできるはずです。

それでも分からないなら、
どうやってどう分からないのか、過程を余さず書いてください。

No.4988 - 2009/02/01(Sun) 19:59:21
数学?U / loof
解答お願いします。
No.4985 - 2009/02/01(Sun) 19:31:36
宜しくお願いします / 魑魅魍魎
点Oを中心とする半径1の円周上に異なる3点A,B,Cがある。
|V(OA)+V(OB)+V(OC)|=1   (Vはベクトルです)
ならば三角形ABCは直角三角形であることを示せ

という問題なのですが回答と違う方法で解いてみたので
添削宜しくお願い致します


与式を二乗し、まとめると
V(OA)・V(OB)+V(OB)・V(OC)+V(OC)・V(OA)=-1 ・・・・・・(1)
ここで
OAとOBの間の角をα
OBとOCの間の角をβ
と置くと
(1)式は
cosα+cosβ+cos(2π-(α+β))=-1

cosα+cosβ+cos(α+β)=-1  ・・・・・・(2)
また
cosα+cosβ=2cos{(α+β)/2}cos{(α-β)/2}
cos(α+β)=2[cos{(α+β)/2}]^2-1
から
(2)式は
cos{(α+β)/2}cos{(α-β)/2}+[cos{(α+β)/2}]^2=0
cos{(α+β)/2}×[{cos{(α-β)/2}+cos{(α+β)/2}]=0
よって
cos{(α+β)/2}=0   ・・・・・・・・・(3)
または
{cos{(α-β)/2}+cos{(α+β)/2}=0・・・・・(4)

(3)からα+β=2πになるからABはO点を通るので三角形ABCは直角三角形である。

(4)を変形すると
cos(α/2)cos(β/2)=0
となるので
α=π またはβ=π
となるので
BCまたはACはO点を通るので三角形ABCは直角三角形である。

No.4984 - 2009/02/01(Sun) 18:13:22

Re: 宜しくお願いします / rtz
>(3)からα+β=2π
πですね。
他はいいと思います。

あとはしょうもないですが、
>回答
は解答が正しいですね、ただの誤変換だと思いますが。

No.4987 - 2009/02/01(Sun) 19:55:36

Re: 宜しくお願いします / 魑魅魍魎
すみません、α+β=πでした。
あと、『解答』の部分も・・・・


rtz様どうもありがとうございました!

No.4989 - 2009/02/01(Sun) 20:10:25
物理 / 大学生
一辺2Lの正方形ABCDの頂点に+q、-q、+q、-q(ABCDの順)の点電荷がある。正方形の中心Oから辺とθの方向にrだけ離れた点Pでの電位を求めなさい。ただし、r>>Lとし、Lに関して二次まで求めなさい。


この問題がわかりません。物理なんですがよろしくお願いします。

No.4982 - 2009/02/01(Sun) 11:52:26
数I / 匿名
(1)三角形ABCにおいて、sinA:sinB:sinC=3:5:7
  とするとき、cosA:cosB:cosCを求めよ。

(2)a=√2、b=2、B=45°の三角形ABCで
  ∠Aの二等分線と辺BCとの交点をDとするとき、
  線分ADの長さを求めよ。

この2問がわかりませんでした。
解き方を教えていただきたいです。

No.4975 - 2009/01/31(Sat) 19:27:34

Re: 数I / X
(1)
sinA:sinB:sinC=3:5:7
より
(sinA)/3=(sinB)/5=(sinC)/7=k
と置くことができます。
つまり
sinA=3k
sinB=5k
sinC=7k
∴△ABCの外接円の半径をRとして、正弦定理により
辺の長さをR,kを用いて表すと
AB=… (A)
BC=… (B)
CA=… (C)
(A)(B)(C)を余弦定理に使うと
cosA=…
cosB=…
cosC=…
ですので…。

No.4977 - 2009/02/01(Sun) 00:09:35

Re: 数I / X
(2)
まず∠Bに注目した余弦定理を用いてcについての方程式を立てて
解きましょう。
次にADが∠Aの2等分線であることから
AB:CA=BD:CD
が成立します(図を描きましょう)のでこれからBDの長さを求めます(BD+CD=BCであることに注意)。
後は△ABDに対して余弦定理を使います。

No.4979 - 2009/02/01(Sun) 00:19:09

Re: 数I / 匿名
詳しい説明ありがとうございます。
おかげさまで解くことができました!

本当にありがとうございました★

No.4983 - 2009/02/01(Sun) 17:46:54
ヒントの意図が・・・ / Jez-z
すべての正の実数x,yに対し√x+√y≦k√(x+y)が成り立つような実数kの最小値を求めよ。

ヒントとして「置き換えによりいかに式を簡単にしていくかに注目せよ」が与えられているのですが、これはどういうことなのでしょうか?
特に、√(2x)=rcosθ、√y=rcosθ(r>0.0<θ<π/2)
とおくところが理解しかねるのですが・・・
他にも解法はあると存じますが、上の考え方について分かる方いましたら、教えてください_(_^_)_

No.4973 - 2009/01/31(Sat) 19:12:50

Re: ヒントの意図が・・・ / Jez-z
連投すいません。上の問題で、自分は必要条件から絞って求めた(x=1,y=4のとき成り立つことが必要)のですが、この解法を思いついたのは、この手の問題を一度経験したことがあるからであって、正しい数学的理解に基づいたものではないので、そこらへんの矛盾した思いを解消したいのですが…
この解法はどのように理解・アプローチすべきでしょうか?(上の質問とは別に考えてください)たとえば、x=1,y=1を代入しても解決しませんよね?

お願いします。

No.4974 - 2009/01/31(Sat) 19:16:56

Re: ヒントの意図が・・・ / angel
> 自分は必要条件から絞って求めた(x=1,y=4のとき成り立つことが必要)

このアプローチであれば、x=y の時でやるものかと思います。
で、ヒントの真意は良く分かりませんが、X=√x, Y=√y あたりの置き換えではないでしょうか。

答えは、kの最小値√2 なので、
 X+Y≦√2・√(X^2+Y^2)
を十分条件として示すわけですが、平方の差を取れば、
 (右辺)^2-(左辺)^2=(X-Y)^2≧0
で綺麗に収まります。

別におきかえなくても、√x, √y のままでよいとも思いますが。

No.4976 - 2009/01/31(Sat) 23:13:37

Re: ヒントの意図が・・・ / Jez-z
訂正です
問題はすべての正の実数x,yに対し√x+√y≦k√(2x+y)が成り立つような実数kの最小値を求めよ。

お手数かけてすいませんでした

No.4978 - 2009/02/01(Sun) 00:17:07

Re: ヒントの意図が・・・ / 豆
√x+√y≦k√(2x+y)に関して、両辺のx,yの次元が等しいので
質問のとおり、√(2x)=rcosθ、√y=rsinθ [yはsinですね]
(r>0.0<θ<π/2)なりに、置換すればよいということ。
(x,y>0なので、x,yを決めればr,θは必ずひとつ定まります。)

こう置くと、
rcosθ/√2+rsinθ≦k√((rcosθ)^2+(rsinθ)^2)
r>0で割れて、rが消えて、x,yの2変数がθのみ1変数の式:
cosθ/√2+sinθ≦k となって、左辺は合成で最大値が出せる
という、からくりです。

同じ次元だということから、手間は掛かりますが、別の方法も
f(x,y)=(√x+√y)/√(2x+y)≦k に関する、f(x,y)の最大値問題と
捕らえれば、f(x,y)の分母子を√xで割ってy/x=t>0と置いて、
f(x,y)=(1+√t)/√(2+t)=g(t) として、変数tに関するg(t)の
最大値問題(微分)と考えても良いですね。

No.4994 - 2009/02/02(Mon) 09:35:13

Re: ヒントの意図が・・・ / 豆
蛇足ながら、ベクトル(1/√2,1)、(√(2x),√y)に対して、
内積≦絶対値の積より、(コーシーシュワルツの不等式)
√(2x)/√2+√y≦√(1/2+1)√(2x+y)
√x+√y≦(√6/2)√(2x+y)
等号は(1/√2)/1=√(2x)/√y つまりy=4xのとき
から求めてもよいですね。

まともに2乗して引き算する方法でも解けますね。

No.4995 - 2009/02/02(Mon) 11:43:44

Re: ヒントの意図が・・・ / Jez-z
豆さん、とてもためになる解説ありがとうございます。(返事遅れましたがw)
復習して自分のものにできるように頑張りたいと思います。

No.5040 - 2009/02/04(Wed) 22:21:54
(No Subject) / ぉぉぉ?
(1/2e)x^2=logx
 
どうやってx=√eになるのかがわかりません

No.4972 - 2009/01/31(Sat) 19:12:02

Re: / ヨッシー
解は1つで、とにかく求まればいいとするのであれば、
 x^2/(2e)=logx
 x^2=2elogx
 x^2=log(x^2e)  X=x^2 とおくと、
 X=log(X^e) 
 e^X=X^e
ここで、X=e であればよいと気付きます。
 X=x^2=e
より x=√e

No.4981 - 2009/02/01(Sun) 10:30:43
ベクトル空間 / ゆたろ
W={[x y z]|x+y+z=0}はR^3の部分空間であることを証明せよ。

これが証明できないです。

No.4970 - 2009/01/31(Sat) 18:19:10
極限 / わかんない
limx→+0 (x/logx)=∞

右から原点にむかうときってことですか

こうゆうlimx→±0 ってグラフを書かないとわからないんですか???

No.4967 - 2009/01/30(Fri) 23:06:54

Re: 極限 / rtz
lim[x→+0]x/(logx)=0です。
logxの定義域はx>0です。

No.4968 - 2009/01/31(Sat) 01:59:35

Re: 極限 / わかんない
lim[x→-0]1/(1+2^1/x)

lim[x→1+0]e^x/logx

これらはどうやってとくかわかりませんおねがいしますmmm

No.4971 - 2009/01/31(Sat) 19:08:15

Re: 極限 / ヨッシー
x→-0 のとき 1/x→-∞ で、2^(1/x)→0 なので、
 (与式)=1

(e^x)/logx にしろ e^(x/logx) にしろ
logx→+0 なので、+∞ に発散します。

No.5003 - 2009/02/02(Mon) 18:08:48
ベクトル / あき
さらにすみません!
お願いします…
http://t.upup.be/?vfGfYvtyfa
http://n.upup.be/?l00ST15T40
の問題の続きで
?@p→をそう定めた時xとyの関係式を出せ
?Aさらにp→はO A B を含む円状にあるがその円の中心と半径を求めよ
?B|q→|が最小値をとるときのその値とp→とq→の成分を求めよ

すみませんがお願いします教えていただきたいです…

No.4964 - 2009/01/30(Fri) 20:33:01

Re: ベクトル / ヨッシー
1枚目の問題、2枚目の問題、上に書かれた問題が、
うまくつながりません。[ア]を求める問題もあるようですが、
全体を載せられますか?

また、
>?Aさらにp→はO A B を含む円にあるが
とありますが、なぜ、円上にあるとわかりますか?

No.4980 - 2009/02/01(Sun) 10:22:25
面積 / あき
連続して申し訳ありません!
2??2*πt^2の関数を0からaまで積分したときの値を求めよ
というもので、1/3πになるみたいなのですが、問題の意味がよくわからなくて、tについて積分したら絶対値にはaが出て来るのですがなぜ数字だけの値になるのかわかりません…

またV=−4+4??2π/3の表面積を、急の体積の公式を半径rの関数として微分すると表面積となることに注意して求めよ
という問題なのですがV=4πr^3/3なのでこの場合r^3が??2−1にあたるかなと思ってそれでS=4πr^2にあてはめるとうまく計算ができず答えが導けなかったのですが考え方から間違ってますか?
ちなみに答えは(4−??2)πらしいです。
宜しくお願いします…

No.4963 - 2009/01/30(Fri) 20:17:50

Re: 面積 / ヨッシー
問題の全貌がわからないと何とも言えませんが、単に
 ∫[0〜a](2√2)πt^2dt
なら、(2√2/3)πa^3 です。他に何か書いてありませんか?
その前の問題で a=1/√2 を求めたとか?

(Vとは何で)V=−4+4√2π/3の(何の)表面積を求めるのでしょうか?
問題を正確に書いてください。

No.4969 - 2009/01/31(Sat) 08:04:17

Re: 面積 / あき
うまく説明できず申し訳ありません(>_<)
問題は
http://r.upup.be/?2jAltAg06P
になります。
先日の入試問題なのであまりあからさまに載せるのは良くないのかと思ったのですが(>_<)
お願いします(>_<)

No.4998 - 2009/02/02(Mon) 16:56:15

Re: 面積 / ヨッシー
前半ですが、やはり予想通り、a=1/√2 を求める部分がありますね。
No.5004 - 2009/02/02(Mon) 18:11:00

Re: 面積 / ヨッシー
後半ですが、「球の体積を微分すると表面積になる」の部分が、
この回転体Vについても言えるということです。
半径rのときのこの回転体(の縮小形)の体積はr^3 に比例するので、
 mr^3
と書けます。そして、r=√2 のときに、体積が
 (-4+4√2)π/3 ←この書き方と −4+4√2π/3 とを見較べて下さい。
なので、
 m=(-4+4√2)π/3 ÷ 2√2=(2−√2)π/3
よって、体積は
 (2−√2)πr^3/3
で表されます。これをrで微分すると、
 (2−√2)πr^2
で、r=√2 とすると、(4−2√2)π
これが、回転体Vの球の部分の表面積になります。
これに、側面(円錐の部分)の面積√2π を足して、
 (4−√2)π
となります。

No.5005 - 2009/02/02(Mon) 18:55:14

Re: 面積 / あき
ごめんなさいよくわからないです…
あとmr^3とはなにを表せるのですか?
もう少し説明いただけると有り難いです。

No.5011 - 2009/02/02(Mon) 23:12:01

Re: 面積 / ヨッシー
「r^3 に比例する」量です。
mは比例定数です。

No.5016 - 2009/02/03(Tue) 05:32:55
数列 / あき
こんにちは!
質問があります
数列2 8/3 26/9 の間にはどんな関係の数列がなりたつんでしょうか?
わかりません…お願いします

No.4961 - 2009/01/30(Fri) 20:09:35

Re: 数列 / タスク
違ったら申し訳ないですが
2 = 2/1
8/3 = (3*2+2)/3^1
26/9 = (3*8+2)/3^2
とすると,
a[n+1] = (3*[a[n]の分子]+2)/3^(n-1) (n ≧ 2), a[1] = 2
となります。

No.4965 - 2009/01/30(Fri) 21:06:32

Re: 数列 / あき
とすると一般項anはどう表せるのですか?
どなたかお願いします(>_<)

No.5000 - 2009/02/02(Mon) 17:08:11

Re: 数列 / ヨッシー
タスクさんのお答えのみが正解とも限らないのです。
取りあえず、タスクさん説より、
正しくは、
 a[n+1] = (3*[a[n]の分子]+2)/3^n
なのですが、
 a[n]の分子=a[n]×3^(n-1)
と書けるので、
 a[n+1]=(a[n]×3^n+2)/3^n
  =a[n] + 2/3^n
と書けます。すると、
 a[n+1]−a[n]=2/3^n
という階差数列が出来るので、(中略)
 a[n]=3−1/3^(n-1)
となります。

また、階差である 2/3, 2/9 を等比数列ととらえたのが
タスクさんの方法ですが、等差数列
 b[n]=-4n/9+10/9
ととらえると、(中略)
 a[n]=(-2n^2+12n+8)/9
となります。

高々3つの値が与えられているだけなので、色んな答えが
作れます。

No.5002 - 2009/02/02(Mon) 17:49:23
(No Subject) / 8
AさんとBさんが組になって、リレーをした
Aさんは最初の7分の4を時速6kmで走った
Bさんは残りの7分の3を時速4kmで走った
かかった時間は4時間15分。
道のりは全部で何キロメートルか

解りません。教えて下さい

No.4956 - 2009/01/30(Fri) 17:22:04

Re: / ヨッシー
4/7、3/7 が時間の比の場合
全体の時間が4.25時間 なので、
Aさんの走った時間は 4.25×4/7=17/7(時間)
Bさんの走った時間は 4.25×3/7=12.75/7(時間)
Aさんの走った距離は 17/7×6=102/7(km)
Bさんの走った距離は 12.75/7×4=51/7(km)
合わせて、153/7 km

4/7、3/7 が道のりの比の場合
全部の道のりを7kmとすると、
Aさんは4kmを走り、かかった時間は
 4÷6×60=40(分)
Bさんは3kmを走り、かかった時間は
 3÷4×60=45(分)
で、合わせて85分かかります。実際には、その3倍の
255分かかっているので、
 7×3=21(km)
が、全体の道のりとなります。

No.4962 - 2009/01/30(Fri) 20:10:03
再び質問させてください。 / ゆきこ

関数f(x,y)の2次偏導関数f[xy](x,y),f[yx](x,y)が連続ならば、f[xy](x,y)=f[yx](x,y)であることを示しなさい。


よろしくお願いします☆

No.4954 - 2009/01/30(Fri) 05:03:14
教えてください / Zambara
P(x)=x^3+ax^2+bx-1,Q(x)=x^3+cx^2+dx+1は整数係数の多項式で,P(x)は有理数の範囲で因数分解できないものとする.αをP(x)=0の1つの解とすると,α+1はQ(x)=0の1つの解となる.この時,P(x)=0の他の解をa,b,c,dを含まずにαを用いて表せ.

よろしくお願いします.

No.4953 - 2009/01/29(Thu) 22:01:09

Re: 教えてください / angel
解を求めるのであれば、
 P(α)=Q(α+1) がαに関する恒等式となる
 P(α)=0
という条件(計4条件)から、a,b(,c,d)をαであらわすことができます。
a,bをαであらわしたら、後はP(x)を因数分解すれば終わりです。( 因数(x-α)を持つことを利用すれば良い )

No.4958 - 2009/01/30(Fri) 19:07:49

Re: 教えてください / angel
なぜ「P(α)=Q(α+1)がαに関する恒等式となる」がいえるのか。
それは、P(x)が有理数の範囲で因数分解できないためです。
P(α)=0 なので、P(x) は (x-α) を因数に持ちます。
そのため、αは有理数でない必要があります。
言い換えると、αは整数係数の1次方程式の解でない必要があります。

さらに言うと、αは整数係数の2次方程式の解でない必要もあります。
このパターンで、αが有理数でないのは、
 α=q1±√q2 ( q1,q2は有理数、√q2は無理数 )
 α=p±qi ( p,qは実数 )
のパターンですが、プラスマイナスの一方がP(x)=0の解なら、他方も同様に解になるためです。
すなわち、αが有理数係数2次方程式 x^2+sx+t=0 の非有理数解となる場合、他方の解も P(x)=0 の解となるため、P(x)は x^2+sx+t を因数として持ち、「有理数の範囲で因数分解できない」と矛盾するのです。

とすれば、P(α)=0 と Q(α+1)=0 から導かれる等式 P(α)-Q(α+1)=0 がαの2次以下の方程式にならず、恒等式になる必要がある、ということです。

No.4959 - 2009/01/30(Fri) 19:19:57

Re: 教えてください / Zambara
分かりました!ありがとうございます。
No.4966 - 2009/01/30(Fri) 21:19:54
教えてください / 高3生
f(x)=x-(1+x)log(1+x)-(1-x)log(1-x)において0<x<1の範囲でf(x1)=0を満たすx1が存在することを示せ。ただし、lim(t→0)tlogt=0を用いてもよい。
という問題です。解法がわかりません。教えてください。

No.4946 - 2009/01/29(Thu) 16:34:41
(No Subject) / kasimu
関数f(x)=4x-x^2に対し、数列anをa1=c,an+1=√f(an)
(n=1,2,3...)で与える。ただし、0<c<2という問題で
1、0<an<2,an<an+1を示せ
2、2-an+1<2-c/2(2-an)をしめせ。
という問題で、1のほうは数学的帰納法でほとんど解けたのですが、2のほうがよくわかりません。教えてください。

No.4936 - 2009/01/29(Thu) 06:19:29

Re: / ヨッシー

に、適っていますか?
だとすると、成り立ちません。

No.4942 - 2009/01/29(Thu) 10:49:53

Re: / kasimu
2-an+1<(2-c)/2(2-an)
です。すいません。

No.4944 - 2009/01/29(Thu) 16:12:50

Re: / kasimu
> 2-an+1<(2-c/2)(2-an)
> です。再びすいません。

No.4945 - 2009/01/29(Thu) 16:13:51
(No Subject) / たつや
 大学の代数の問題なんですが…

29を法とする原始根を求めなさい。

という問題なんですが、調べてもよくわかりません。
お手数ですが詳しい解答よろしくお願いします。

No.4933 - 2009/01/29(Thu) 03:34:37

Re: / にょろ
原子根って単純計算以外無かったはず…
一応以下のJavaSciptソースでやったら
2,3,8ってでましたけど…ソース間違ってたらごめんなさい

p=29;
f();
function f(){
document.write("Start
");
//iがpの原子根であるか調べる
for(i=2;i<p;i++)
{
for(j=1;j<p;j++){
try{
n=Math.pow(i,j);//i^jをとる
}catch(e){document.write("EE"); return;}



if(n%p==1){
if(j==p-1){document.write(i+",");}
break;
}
}
}
}

No.4934 - 2009/01/29(Thu) 04:20:06

Re: / cametan
横から失礼します。

>>にょろさん

多分そのソース、マズいと思います。
プログラムにミスがある、んじゃなくって、JavaScriptの場合、EcmaScriptの仕様により、

「15桁以上の計算精度は保証しない」

んです。
従って、Math.pow(10, 14)前後の桁数から無茶苦茶な計算結果が返ってくる、んで、この手の数値計算には、正直JavaScriptは向きません。

No.4937 - 2009/01/29(Thu) 06:50:47

Re: / にょろ
やっぱり不味いですかね?
そうは思ったんですけどね
longで別の言語でやろうかなとは思ったんですけど
そうすると今度は出しても読めなくなるかと…
(しかも起動するのが面倒くさい)

C#でやったらlong型では8は結果として帰ってきませんでした。
ごめんなさい

というかこの問題はなんなんですかね?
単純に問題として出てくるような物ではないと思いますが…
(こんなもの手計算したくないですし)

No.4939 - 2009/01/29(Thu) 07:32:13

Re: / らすかる
プログラム

#include

int main(void)
{
 int i, j, k, p;

 p = 29;
 for(i = 2; i < p - 1; ++i){
  k = i;
  for(j = 2; j < p; ++j){
   k = (k * i) % p;
   if(k == 1){
    if(j == p - 1)
     printf(" %d", i);
    break;
   }
  }
 }
 printf("\n");
 return 0;
}

実行結果
2 3 8 10 11 14 15 18 19 21 26 27

No.4940 - 2009/01/29(Thu) 08:46:30

Re: / にょろ
らすかるさん
成る程そうか思いっきり忘れてました。
その方法なら無限大に飛びませんね。
確かに僕の方法だとすぐにコンピュータが出来る範囲ではなくなりますね。
ありがとうございます。

No.4941 - 2009/01/29(Thu) 10:08:57

Re: / cametan
>>らすかるさん

なるほど。Cだとそうやってプログラムすれば良いのですね。

>>にょろさん

ちなみに、直球勝負でしたらLisp系言語の方がやりやすいです。
JavaScriptなんかも内部的には「Lisp系言語」に極めて近いんですが、残念ながらブラウザで動かすのが前提の為、計算精度に対する要求が低いんですよね。まあ、ブラウザで数値計算やるヤツもあんまいない、と(笑)。
以前、開平法をJavaScriptで書いてみよう、と挑戦した事があったんですが、実は僕自身も思いっきりハマりました(笑)。開平法だとアルゴリズム上、どんどん引数が膨らんでいくので、何億、って数値になっちゃって計算結果が狂っちゃった、と言う経験があります。
それで、「JavaScriptのおかしな桁数の制限」ってのを示唆された、って経緯があったんです。

以下、Common Lispでの問題のソースコードを紹介しておきます。(mod a^i p)が1の時T、そうじゃない場合NIL、として、a^1〜a^(p-1)の計算結果を羅列するようにしました。左側から1〜p-1の並びになっています。

(defun f (p)
 (do ((i 1 (if (= i p)
         1
         (1+ i)))
    (a 2 (if (= i p)
         (1+ a)
         a))
    (ls0 '() (if (= i p)
           '()
           (cons (= (mod (expt a i) p) 1) ls0)))
    (ls1 '() (if (= i p)
           (cons (list a (reverse ls0)) ls1)
           ls1)))
    ((= a p) (pprint (reverse ls1)))))

;;実行結果

CL-USER> (f 29)

((2
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (3
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (4
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (5
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (6
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (7
 (NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL
  NIL T NIL NIL NIL NIL NIL NIL T))
 (8
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (9
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (10
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (11
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (12
 (NIL NIL NIL T NIL NIL NIL T NIL NIL NIL T NIL NIL NIL T NIL NIL NIL T
  NIL NIL NIL T NIL NIL NIL T))
 (13
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (14
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (15
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (16
 (NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL
 NIL T NIL NIL NIL NIL NIL NIL T))
 (17
 (NIL NIL NIL T NIL NIL NIL T NIL NIL NIL T NIL NIL NIL T NIL NIL NIL T
  NIL NIL NIL T NIL NIL NIL T))
 (18
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (19
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (20
 (NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL
  NIL T NIL NIL NIL NIL NIL NIL T))
 (21
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (22
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (23
 (NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL
  NIL T NIL NIL NIL NIL NIL NIL T))
 (24
 (NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL
  NIL T NIL NIL NIL NIL NIL NIL T))
 (25
 (NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL NIL T NIL NIL NIL NIL NIL
  NIL T NIL NIL NIL NIL NIL NIL T))
 (26
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (27
 (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL T))
 (28
 (NIL T NIL T NIL T NIL T NIL T NIL T NIL T NIL T NIL T NIL T NIL T NIL T
  NIL T NIL T))); No value
CL-USER>

らすかるさんの結果と変わりませんね(当たり前ですが)。
やっぱり2、3、8、10、11、14、15、18、19、21、26、27が原始根、です。
ちなみに、アルゴリズム的にはにょろさんのものと丸っきり変わりありません。

No.4943 - 2009/01/29(Thu) 14:22:36

Re: / らすかる
乗除算をなくしたプログラム
手作業で求めるならばこの方法が良いかと思います。

#include

#define N  29

int a[N];

int main(void)
{
 int i, j, k;

 for(i = 2; i < N - 1; ++i){
  k = 0;
  for(j = 1; j < N; ++j){
   if((k += i) >= N)
    k -= N;
   a[j] = k;
  }
  k = 1;
  for(j = 1; j < N; ++j)
   if((k = a[k]) == 1)
    break;
  if(j == N){
   printf("\n%d は素数ではありません.\n", N);
   return 1;
  }
  if(j == N - 1)
   printf(" %d", i);
 }
 printf("\n");
 return 0;
}

No.4947 - 2009/01/29(Thu) 17:14:04

Re: / にょろ
JavaScriptけっこう手軽なので(ブラウザで動くし…)
単純な物だとよく使うんですよね。
ただ、平均をとると言うことをやったとき
ずれが生じたので(多分2→10進数)C#のdecimalに流れたことが…
ラスカルさんのと同じアルゴリズムでやったら
2、3、8、10、11、14、15、18、19、21、26、27がでてきました。
Javaって内部でintとdouble値だとおもってたんですが…
doubleだけだったんですね
しらべてみたら確かに15桁ってありました…

No.4948 - 2009/01/29(Thu) 17:16:20

Re: / cametan
>JavaScriptけっこう手軽なので(ブラウザで動くし…)単純な物だとよく使うんですよね。

そうですね。手軽さ、って意味では結構僕も好きです。
あくまで「数値計算用」のラピッドプロトタイピングには向かない、って事ですね。
結構「数値計算」をマトモにJSで行おうとすると、手間的にはCで書くのとあんま変わんなくなっちゃうんですよね。JSの最大の魅力「手軽さ」が無くなっちゃう、って事で。
相当「良く考えないと」計算結果が信頼出来なくなっちゃいます。

>Javaって内部でintとdouble値だとおもってたんですが…

恐らくタイポだと思っていますが、一応ここ見てる人の為に。
「Java」と「JavaScript」は丸っきり違う言語です。設計者も全然違いますし、両者には全く関係がありません。
(もっとも、最近のJava開発キット=JDKにはJavaScriptが同梱されていますが……)
にょろさんの発言は「JavaScriptにintとdouble値が無い」って意味ですね。JavaScriptには数値型としてはNumber型、と言う大まかな型しか存在しません。

参考:とほほのJavaScript入門(数値)
http://pzxa85.hp.infoseek.co.jp/www/wwwjsnum.htm

一方、JavaにはC言語よろしく、short、int、long、float、double、等の型が存在します。

参考:Javaのデータ型
http://www.ics.kagoshima-u.ac.jp/edu/proen3/datatype.html

なお、どっちがプログラミング言語として優秀か?って話が良く出ますが、「全く違う言語」なんで比較してもあまり意味が無いですね(笑)。ただし、ハッカー(プログラミングの達人)連中はJavaScriptの方を高く評価している傾向がある、と言う事を申し添えておきます。「仕事では」must言語のJavaですが、設計自体はあまり評価されていないようです。
反面、初期はバグが多かったらしいんですが、設計自体は「JavaScriptの方が優秀だ」と言う評価が多い模様です。

参考:JavaScript: 世界で最も誤解されたプログラミング言語
http://d.hatena.ne.jp/brazil/20050829/1125321936

今回のネタの場合、あくまで「数値計算」と言うジャンルはJavaScriptが得意ではない、と言うお話です。

No.4950 - 2009/01/29(Thu) 18:00:32

Re: / にょろ
指摘されて気付きました
タイプミスです。
(いつもJSって書くんですけど…あれ?)
Javaは初めてさわったプログラミング言語なんですよ…(何で間違えたんだろう?)
ごめんなさい
指摘ありがとうございます

No.4952 - 2009/01/29(Thu) 20:43:05

Re: / cametan
>>にょろさん

>タイプミスです。

ああ、やっぱりそうでしょう。そうだとは思ってはいたのですが。
あくまで上で書いた注釈は「掲示板を見ている人の為」なんで、にょろさん向けのものじゃないです。
実際、タイポやる可能性はあるんで(笑)。JavaScriptって打つには長すぎますしね(笑)。

と言う辺りで本題。
上のらすかるさんの2つ目のプログラム、ってのがどう言うアルゴリズムなんだろ?と解読するのに時間がかかりました(笑)。何か上手いことやってるらしいんですが、僕の感覚から言うと、正直C言語って読みづらいです(笑)。break;被ると何が条件でどこから何の目的で脱出してんだか、パっと見じゃ分からないんですよね。感覚的な話ですけど。
しかも、らすかるさんは相当なCの達人らしく、表記法でかなりのショートカット噛ましています。従って、「手計算でやる」と言うにしても読解がかなり難しいな、と。
恐らく「宿題」のつもりだろう、ってんでCommon Lisp使って解読してみました。

まず、第一段階としては次の部分があります。

  k = 0;
  for(j = 1; j < N; ++j){
   if((k += i) >= N)
    k -= N;
   a[j] = k;

まあ、これは単純に言うと「配列生成」ですよね。要素数N=29の配列aを用いる、ってのがこのプログラムのポイントなんですが、1≦j<Nの範囲で次のルールを適用しています。

1:適当な数iを考える。
2:kの初期値は0。
3:j番目の配列要素には数値kを代入する。
4:ただし、kがN以上の場合、kはk−Nとする。
5:それ以外の場合はk=k+iとなる。

まず、これが一体どう言う配列を生成するのか、って事なんですけど、これがCだと部分的なテストが出来ないんで見づらいのです。
上の作業をCommon Lispに翻訳すると、次のようなソースになります。

(defun f (i N)
 (do ((j 1 (if (>= k N)
       j
       (1+ j)))
    (k 0 (if (>= k N)
         (- k N)
         (+ k i)))
    (a '() (if (>= k N)
          a
          (cons k a))))
   ((> j N) (reverse a))))

これで、例えばiを2として、N=29とすると次のような配列(リスト)を返すようです。

CL-USER> (f 2 29)
(0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 1 3 5 7 9 11 13 15 17 19 21 23 25
27)
CL-USER>

iを4としてN=29とすると次のような配列(リスト)を返すようですね。

CL-USER> (f 4 29)
(0 4 8 12 16 20 24 28 3 7 11 15 19 23 27 2 6 10 14 18 22 26 1 5 9 13 17 21
25)
CL-USER>

つまり、手計算的に言うと、初期値がゼロで29個の数列を考えて、与えられたiを加算していく、って事を考えます。ただし、その加算していった過程で、数列が29を越えた場合、そこから29を引いて、またiを加算していき、N番目まで計算する、と言う手順を踏みます。

次がこの数列から新しい数列を一種「生成する」んですね。Cのソースで言うと次の部分、です。

  k = 1;
  for(j = 1; j < N; ++j)
   if((k = a[k]) == 1)
    break;

1≦j<Nの範囲で次の事を行います。

1:初期値k=1とする(ただし、このkは前出のkとは無関係)。
2:配列aのk番目の要素を次の要素番号とする。
3:延々とa[k]をピックアップし続ける。

ってのがポイントのようです。
ただし、終端条件j=Nに到達しない内にa[k]=1、になると「計算終了」となります。j<Nの状態で1が出てくる、と言うのは、端的に言うと「原始根ではない」ようです。これがこのアルゴリズムの肝、のようですね。
これを考える前、では配列aがどう変換されるのか、見てみたいと思います。Common Lispで書くと次のようなソースになります。

(defun ex (N a)
 (do ((j 1 (1+ j))
    (k (nth 1 a) (nth k a))
    (ls '() (cons k ls)))
   ((= j N) (reverse ls))))

例えば、先ほどの(f 2 29)は配列(リスト)を返すんで、このリストがどう変換されるのか見てみたい、と思います。

CL-USER> (ex 29 (f 2 29))
(2 4 8 16 3 6 12 24 19 9 18 7 14 28 27 25 21 13 26 23 17 5 10 20 11 22 15
1)
CL-USER>

同様に、(f 4 29)がどう変換されるか見てみます。

CL-USER> (ex 29 (f 4 29))
(4 16 6 24 9 7 28 25 13 23 5 20 22 1 4 16 6 24 9 7 28 25 13 23 5 20 22 1)
CL-USER>

これ、面白いんですよ(笑)。結論から言うと2は原始根で4はそうじゃない、んですが、このアルゴリズムに従うと、原始根の場合は、終端条件(j=N)になるまで一切1が出てこない、んです。反面、4のような「原始根じゃない」場合、数列の途中辺りで1が出現して以降は同要素でループし出す、んですね。
らすかるさんの提示したソースですと、平たく言うと、この中間地点で1が出現するかどうか見定めて、1が出ちゃうと後は「同要素でループし出す」のを見越して計算を打ち切り、そうじゃない場合は終端まで計算していく、って事のようです。終端まで計算する以上、与えられたiは必然的に「原始根になる」って事のようです。なるへそ、ですね。
なお、Cのソースに準じるように上のexを書き直すを次のようになります。

(defun g (i N a)
 (do ((j 1 (if flag
         N
         (1+ j)))
    (k (nth 1 a) (nth k a))
    (flag nil (= k 1)))
   ((= j N) (and flag i))))

flagと言う変数を設定してkが1の場合は計算脱出してnilを返し、そうじゃなければ、最終的にiを返すようになっています。
ここまで出来れば、あとは2≦i<Nの範囲で繰り返させるだけ、です。最終的には次の形で関数fとgを纏めます。

(defun h (N)
 (do ((i 2 (1+ i))
    (ls '() (let ((flag (g i N (f i N))))
           (if flag
             (cons flag ls)
             ls))))
   ((= i N) (reverse ls))))

ここでもflagを設定して、gが数値を返すのかそれともnilを返すのか、でリストlsの要素として追加するのかどうか判定しています。
実行結果は以下のとおり、ですね。

CL-USER> (h 29)
(2 3 8 10 11 14 15 18 19 21 26 27)
CL-USER>

と言うわけで、らすかるさんのアルゴリズムでCommon Lispでも記述可能、だと言うことが分かりました。
ちょっとハードだったんですけど、なかなか面白かった、です。

No.4991 - 2009/02/01(Sun) 22:10:34
全22523件 [ ページ : << 1 ... 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 ... 1127 >> ]