- ベストアンサー
xyzを求めたい
仕事で次のような式のxyzを整数値で求める必要が時々あります。 875x+252y+466z=146,319 数字はいつも変わり、そのたびに適当に数字を入れて何とかやっています。 今回も四苦八苦してやっと x=45 y=380 z=24 となりました。他に答えはありますか? 場合によっては答えがないこともあるかと思いますが できるだけ「=」にしたいのです。 素人で申し訳ありませんが、どなたか簡単に数値を求める方法があったら、教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> いったいどんなプログラムなのでしょうか? EXCELのVBAで即席で作ったものですと…… (係数の順序入れ替えはやってません) Sub main() Call ask_xyz(875, 252, 466, 146319) '左辺の係数と右辺の数値を指定する End Sub Sub ask_xyz(a, b, c, s As Long) Dim x, y, z As Long Dim r1, r2, r3 As Long '余り Dim x_max, y_max, z_max As Long '最大値 Dim n As Long '表示行数カウント用 'セルの内容をクリア Worksheets("Sheet1").Range("A:C").Clear n = 0 x_max = s / a For x = 1 To x_max r1 = s - a * x y_max = r1 / b For y = 1 To y_max r2 = r1 - b * y z_max = r2 / c For z = 1 To z_max r3 = r2 - c * z If r3 = 0 Then n = n + 1 '該当したx,y,zを表示 Worksheets("Sheet1").Cells(n, 1) = x Worksheets("Sheet1").Cells(n, 2) = y Worksheets("Sheet1").Cells(n, 3) = z End If Next z Next y Next x End Sub
その他の回答 (4)
- putinail
- ベストアンサー率57% (4/7)
x, y, zが2~4桁の整数で、875x+252y+466z=146,319の場合は、 x, y, zの組み合わせは85あります。(プログラムで出しました。) プログラムで出さないとなると、#1さん、#2さんのような方法しかなさそうですね。 あまり参考になっていませんが^^;
お礼
プログラムが組めればすぐ出来るんですね。
- gonic
- ベストアンサー率30% (18/59)
私も#2の方と基本的には同じですねえ……。 ちなみにプログラムを走らせたら、該当する組がたくさん出てきました(まだこの程度ならすぐ答えが出ますね、2年くらい前のパソコンですが)。 ご参考までに。 (1,15,304) (1,248,178) (1,481,52) (3,21,297) (3,254,171) (3,487,45) (5,27,290) (5,260,164) (5,493,38) (7,33,283) (7,266,157) (7,499,31) (9,39,276) (9,272,150) (9,505,24) (11,45,269) (11,278,143) (11,511,17) (13,51,262) (13,284,136) (13,517,10) (15,57,255) (15,290,129) (15,523,3) (17,63,248) (17,296,122) (19,69,241) (19,302,115) (21,75,234) (21,308,108) (23,81,227) (23,314,101) (25,87,220) (25,320,94) (27,93,213) (27,326,87) (29,99,206) (29,332,80) (31,105,199) (31,338,73) (33,111,192) (33,344,66) (35,117,185) (35,350,59) (37,123,178) (37,356,52) (39,129,171) (39,362,45) (41,135,164) (41,368,38) (43,141,157) (43,374,31) (45,147,150) (45,380,24) (47,153,143) (47,386,17) (49,159,136) (49,392,10) (51,165,129) (51,398,3) (53,171,122) (55,177,115) (57,183,108) (59,189,101) (61,195,94) (63,201,87) (65,207,80) (67,213,73) (69,219,66) (71,225,59) (73,231,52) (75,4,171) (75,237,45) (77,10,164) (77,243,38) (79,16,157) (79,249,31) (81,22,150) (81,255,24) (83,28,143) (83,261,17) (85,34,136) (85,267,10) (87,40,129) (87,273,3) (89,46,122) (91,52,115) (93,58,108) (95,64,101) (97,70,94) (99,76,87) (101,82,80) (103,88,73) (105,94,66) (107,100,59) (109,106,52) (111,112,45) (113,118,38) (115,124,31) (117,130,24) (119,136,17) (121,142,10) (123,148,3) (153,5,24) (155,11,17) (157,17,10) (159,23,3)
お礼
すごい!! こんなに答えがあるんですか? いったいどんなプログラムなのでしょうか? 素人の私には全くわかりません。教えていただけませんか?
- uyama33
- ベストアンサー率30% (137/450)
数字は何桁くらいですか 解や係数が自然数で、しかも 余り大きくないなら、 プログラムを組んで 調べ尽くす。 ただし、 マイナスの数を含むなら この方法は意味がない。 解も係数も自然数なら 係数の最大のものから始める 875x+252y+466z=146,319 の場合は、xの範囲を決める。 かくxの値に対して zの値の範囲を決める x、zの値に対して、 252で割り yの値を決める(余りがゼロ) ところで、マイナスの整数 の場合もあるのですか?
お礼
ありがとうございます。 マイナスの場合はありません。解も係数も自然数です。 係数は2~4桁、解はだいたい5桁以上だと思います。 係数の最大のものから始めたら早いですね。
- backflip
- ベストアンサー率23% (10/42)
一番下の桁の数字だけをまず計算するというのはどうでしょうか? 5x+2y+6z=???9 という感じで。 これで、x,y,zも下の桁だけ求まります。 他は思いつかないですね・・・
お礼
早速ありがとうございます。 そうですね。下の桁だけでも決まればいくらか早くなりそうです。
お礼
ほんとうにご丁寧にありがとうございました。 ご回答いただき良くわかりました。これからプログラムの勉強をしなければならないという事を・・・。 パソコンを有用に活用するためにも、頭を使ってがんばります。 ほんとうにありがとうございました。