IT
มัธยมปลาย
เคลียร์แล้ว

情報のテストが近いのですが、💦
20の行 黒字→ピンク字 の式にすると高速化されるのが
    なんでかわかりません
40の行 この式も高速化できるそうですがわかりません

どちらか片方でも分かる方教えてほしいです、!

10 1NPUT A 20 FOR N=1 70 A FOR N=1 70 8QR(H) IF A-N*INT(A/N)=0 THEN PRINT N 7 FOR N=1 T0 8QR(#) 30 40 50 END IF 60NEXT.N 0 FND

คำตอบ

✨ คำตอบที่ดีที่สุด ✨

AとNの最大公約数をユークリッド互除法で求めているプログラムだと思います。

20行目ですが、
最大公約数を求めるとき、与えられた数の回数分、ユークリッド互除法で割り算する必要がなく、
せめて、√N回実行すれば、答えが求まるからだと思います。

40行目に関しては、
FORで回している回数分、PRINT関数を呼び出すと処理が多くなってしまうので、
せめて、FORで結果がわかった最後に、PRINT関数で結果を表示させれば良い。
要するに、PRINTをFORの外側に出してあげればOKだと思います。

きく

なるほど、最大公約数を求めているんですね!まずそこを理解してしてませんでした、、ありがとうございます

√N回ということは30行めの式には例えば√11を入れた場合、表示されるのは何になるのでしょうか、?
それと外側というのはどこでしょうか、?

質問を重ねてすみません、!でもだいぶ分かってきました。助かります。

dio

大変申し訳ありません。はやとちりでした。
最大公約数を求めているのではなくて、おそらくAが素数であるかどうかを調べるプログラムだと思います。
先に回答されていた方の画像を見て、実験してみてそう判断しました。

INT(A/N)は、INT関数といってA/Nの整数部だけを拾ってくる関数です。
INT関数に√11を入れた場合は、INT(√11)=3となります。
また、30行目の式にはA/√11となりますが、ここは私もちょっとよくわかりません。

PRINT関数をFORの外に出すというのは、適切だと思っていますが、具体的にどこに置けばよいか、
今プログラムを追っているところなので、具体的にはわかりません。

再度、考えて改めて投稿しようと思います。すみませんでした。

きく

いえいえ、!今ので9割分かりました☆同じく、INT関数がnの後ろにくるのは私も問題の意図がわかりませんでした、、
40行目を書けという問題はおそらく出ないのでいつか分かったら教えて頂ければ嬉しいです☺️

dio

改めて。A=11としたとき、
20行目は、SQR(A)=√11となりますが、SQRの関数の仕様説明がないので3なのか、3.316...なのかは不明です。
ただ、素数判定するだけのプログラムなので、A=11としたとき、
N=1から、1,2,3,4,5,6,7,8,9,10,11まで計算の対象にするのは、効率が良くないです。
A=11だとしたら、Nを1,2,3まで計算すれば、計算の節約になるのは、おそらく了解済みだと思います。

次に、40行目なんですが、PRINT関数をFORの外に置くよりも、30行目で計算結果が0とわかった時点で、
結果を返して終了する RETURN Nが正解だと思います。

ただ、いずれにしても何の言語を扱っているか不明なので、ここまでで精一杯です。
久々に、おもしろい問題、ありがとうございました。

きく

return n なるほどです!自分が思っていたより深い問題でした、、言語はおそらくBASICです、💦
おかげさまで、もうこの問題でわからないことはなくなりました!
ありがとうございます😭テスト頑張ります

แสดงความคิดเห็น

คำตอบ

そのままでも良い気がしますが...因みに何をするプログラムですか?
条件が与えられてるので、ある値になったら出力するプログラムだとは思いますが。

きく

こちらがもとの練習問題です、!
(3)で、答えが先程のピンク字になるのですが、√A(squA)にしても成立するのがよくわからない感じです

ノエル

A=9や16など、平方数で考えると良いと思います。例えば9だったとして、 問題文にあるプログラムだと9回繰り返しますが、√にすれば3回で済みます(つまり実行時間が短くなる)。
平方数ではない場合は小数点以下を切り捨てるかどうかが分からないので考えていません。

ノエル

40行目については少し考えさせてください。

きく

たしかに√をつけると回数が少なくなり、速くなりますね!これでだいぶ理解できました。助かります
それと(3)で40行目も答えなさい。といった問題になってないので、もしかしたら結構複雑かも知れません、、

ノエル

無事解決したみたいですね。片方しか答えられず申し訳ありません。

きく

お二方のおかげで解決しました!いえいえありがとうございます😭

แสดงความคิดเห็น
ข้อสงสัยของคุณเคลียร์แล้วหรือยัง?