※数値はすべて整数だと思ってください。
表題の件ですが、例えば、「A」が入力された文字数、「B」が基準となる文字数とします。
すると「C = A + (B - A % B)」で「C」に代入される数値はかならず「B」の倍数になることが保証されています。
具体的には:
A=15、B=16の場合 => C = 15 + (16 - 15 % 16) なので C は 16
A=17、B=16の場合 => C = 17 + (16 - 17 % 16) なので C は 32
A=3、B=10の場合 => C = 3 + (10 - 3 % 10) なので C は 10
A=10、B=3の場合 => C = 10 + (3 - 10 % 3) なので C は 12
となり、入力された文字数が基準となる文字数に満たない場合は基準まで文字数を補填し、入力が基準以上の場合は基準の倍数まで文字数を補填することになります。
そうなることは分かるのですが、「なぜそうなるのか?」がうまく説明できずモヤモヤしています。
「A」が「B」より小さいときは、まだ分かるのですが(基準に足りない分を足しているだけなので)、「A」が「B」より大きい場合に、「C」が必ず「B」の倍数になることをどう証明したら良いでしょうか。
皆さんのお知恵を拝借できれば幸いです。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
失礼しました。
先の回答で、r は不要でした。混乱させてしましました。
一言で言えば、
「ある数を別の数で割って、あまりが出たら、ある数から予めあまりの分を引いたものは、割り切れる」です。(あまり0になるので)
さて、一般に、AをBで割ったときに、商が n あまりが r という関係は、
A = nB + r と書けます。
右辺のうち、nB は B で割ると(割り切れて)n ですし、その後、r が余ります。
質問の式では、あまりが A % B という式で表されていますから、あまりをこれで置き換えると
A = nB + (A % B) になります。
質問の式の右辺
A + (B - A % B)
の順序を入れ替えると
A - (A % B) + B です。
A - A % B は、上述の通り、Bで割り切れて、(商を n とすると)
A - A % B = nB と表現できます。
あとは、+B ですが、一般に、
「ある数で割り切れるふたつの数を足したり引いたりした結果も、その数で割り切れる」と言えます。
だから、A - A % B (ここまで、Bで割り切れる) + B(これも、Bで割り切れる)の結果は、Bで割り切れます。
式で表現すると、
A - A%B + B = nB + B = (n + 1)B なので、Aは、商 n + 1 (ここで、n は、A をBで割った商)で割り切れます。
たびたびのご回答ありがとうございます。
やっと腑に落ちました。
「A = nB + r 」とするのがポイントですね。
「A=nB+r」、「A%B=r」として、元の式を
「C=(nB+r)+(B-r)」と書き換えると構造が一目瞭然ですね。
これなら、必ず「C」が「B」の倍数になることが保証できるようになるわけだ…。
実はコレ、元は下記の関数のアルゴリズムです(Pythonです)。
def mkpad(s, size):
s = s.encode("utf-8") # UTF-8文字列をバイト列に変換する
pad = b' ' * (size - len(s) % size)
return s + pad
「s」に文字列、「size」に任意のサイズを渡して実行すると、
「size」の倍数のバイト列は返ってくるというものですが、
今後は、この程度のアルゴリズムは自前に考えられるようになりたいものです。
現時点では、目の前に提示された式から常に意図した値が得られることを証明することもできないわけですが、
定石を反復練習するうちに自分の手が打てるようになることを信じて、
コツコツ精進していきたいと思います。
ご指導ありがとうございました。
No.2
- 回答日時:
>基準に足りない分を足しているだけなので
「A」が「B」より大きい場合もおなじですよ
「A」が「B」の倍数に足りない分 (B - A % B)を足しているだけです。
A=10、B=3の場合 => 2=(3 - 10 % 3)不足ですよね。
No.1
- 回答日時:
A%Bを考えましょう。
これはAをBで割った余りですね。
だから、あるn,rが存在して、
A=nB+(A%B)と書けます
だから A-(A%B)=(nB+A%B)-(A%B)=nB です。
つまりC=nB+B=(n+1)B はBの倍数です。
早速のご回答ありがとうございます。
「あるn,rが存在して」ということは、等比数列的な考え方で理解できるということでしょうか?
(「r」は公比?)
申し訳ありませんが、「A=nB+(A%B)と書けます」でいきなりついて行けませんでした(汗)
元の式「A+(B-A%B)」を素朴に変形すれば「A=-B+(A%B)」ですよね……
ご説明中の「r」はどこに行ってしまったんでしょうか?
「a mod b」で「a」をインクリメントすると、「b」周期の繰り返しになるので、もしかして時計算的な考え方をすんだろうか?
…とか、まだモヤモヤしてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) エクセルのマイナス表示 3 2022/03/28 16:35
- Excel(エクセル) countif関数について質問 4 2022/06/14 12:11
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Java Java 年数計算 3 2023/01/28 10:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オルカンを8月1日付けで購入...
-
絶対値と相対値の違い
-
投資信託について本を読んだり...
-
国内で一番高さのある歩道橋
-
低身長イケメン、中身長フツメ...
-
EDATE関数で末日を正確に表示さ...
-
並び替えマクロの意味を教えて...
-
経過時間を計算したい
-
投信で金額買付した際の保有口...
-
「普通に~」という言葉について。
-
ちょっとした質問です 性同一性...
-
楽天アプリ iSPEED
-
この4月からNISAを始めます。 ...
-
毎月決算型の投資信託で基準価...
-
確定拠出年金運用商品選択について
-
S&P500とかの投資信託は一時的...
-
インベスコ 世界厳選株式オープ...
-
来年からの新nisaでの運用について
-
オールカントリ-で投資している...
-
円奏会は、いかがなものですか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
オルカンを8月1日付けで購入...
-
投信信託を行おうと思います。...
-
御朱印
-
EDATE関数で末日を正確に表示さ...
-
100×1.2と100÷0.8 どちらも20%...
-
EXCEL
-
積み立てニーサ初心者ですが、...
-
絶対値と相対値の違い
-
「普通に~」という言葉について。
-
どのくらいへ出たら過敏性腸症...
-
ウォータースライダーなどの身...
-
低身長イケメン、中身長フツメ...
-
幸せって何が基準なのかな?
-
新規設定の投資信託
-
エクセルで時間を計算する場合...
-
世界一頭がいい人って誰ですか?
-
エクセル この関数はどうすれば...
-
投信で金額買付した際の保有口...
-
女性が喜ぶラブホってなにを基...
-
人生における「成功」とはなん...
おすすめ情報