実際に割り算をしないで17で割った余りをできるだけ簡単に求められる方法を教えてください。(中学1年まで程度の学力で理解できるレベル) 13でも19でもいいです。

どんな数字(0、1,2,5はいりません)(主に素数)でも共通の考え方があれば、その方がいいのですが。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/09/04 00:44:21
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ahirusan No.6

回答回数229ベストアンサー獲得回数3

ポイント2pt

最も簡単なのは、プログラミングすることです。C言語でもJavaでもRubyでもOK!

余り = 対象数 % 17 ;

このコードはJavaであれば、そのまま(日本語のまま)使えます。

何にしても、この程度のプログラムは中学1年生でも理解できるでしょう。

id:yamadakouzi

本人がアルゴリズムを理解してプログラミングできればOKです。

2008/09/01 00:43:30

その他の回答8件)

id:tso973 No.1

回答回数49ベストアンサー獲得回数5

ポイント30pt

①引けなくなるまで17を引いていく。


②17進数に変換して下1桁を余りとする。

 (関数電卓を使う事を仮定してます)


③17の倍数表を作っておいて一番近い小さい倍数との差を計算する。

id:yamadakouzi

早速、回答いただきまして、ありがとうございます。

計算機(PC,電卓など)、そろばん、筆算、暗算での計算は禁止してませんからOKです。

でも、桁数が多いと大変ですね。

桁数が多い時(数十桁程度)の時も、考えていただけませんでしょうか。次の回答をお待ちしてます5回まで受け付けますので、どしどし案をお願いいたします)

2008/08/31 11:01:19
id:rsc96074 No.2

回答回数4503ベストアンサー獲得回数437

ポイント15pt

1. 与えられた数をyとすると、y>17*10^nとなる最大の数を結果が正である範囲で引けるだけ引く。

2. 次に、その結果から、17*10^(n-1)を同様に結果が正である範囲で引けるだけ引く。

3. 同様にnを減らしていって、同様の操作を、17まで続けて、引けなくなったとき、それが求める余りとなる。

(例)365を17で割ったときの余りを割り算を使わずに求めてみる。画面が乱れるので"-"の代わりに"(-"を使いました。0で詰めてあるのも画面を見やすくするためです。

 

365

170(-

------

195

170(-

------

025

017(-

------

008

 

 実際は、17の倍数表を作っておいて、次のようにする方がいいかも知れません。

17,34,51,68,85,102,136,153

 

365

340(-

------

025

017(-

------

008

id:yamadakouzi

ありがとうございました。

でも、桁数が多いと大変ですね。

桁数が多い時(数十桁程度)の時も、考えていただけませんでしょうか。次の回答をお待ちしてます5回まで受け付けますので、どしどし案をお願いいたします)

早速、回答いただきまして、ありがとうございます。

でも、桁数が多いと大変ですね。

桁数が多い時(数十桁程度)の時も、考えていただけませんでしょうか。次の回答をお待ちしてます5回まで受け付けますので、どしどし案をお願いいたします)

2008/09/01 00:15:44
id:imo758 No.3

回答回数121ベストアンサー獲得回数19

ポイント18pt

17の場合:102 = 17 x 6 を使うのがいいと思います。

例:927429199218750

1.最上位の桁を取り出す 例:9 と 27429199218750

2.最上位の桁をニ倍する 例:18 と 27429199218750

3.必要ならば残った数字の上二桁に17か34を足しておく (適用するなら 18 と 44_429199218750 などになる)

4.二桁下の部分から引いて新しい数字とする 例:27 - 18 と 429199218750 → 9429199218750

5.1~4を繰り返す 9429199218750 249199218750 45199218750 4399218750 319218750 13218750 3018750

 128750 26750 6350 230 26

6.最後の二桁はがんばる 26 = 17 x 1 + 9

あるいは 10000 - 4 = 17 x 588 を使って、4倍して四桁下に足すを使ってもいいと思います。

13なら1001 = 77 x 13 を使い1倍して三桁下からひく

19なら100 - 5 = 19 x 5 を使い5倍してニ桁下に足す

とにかく10^nに近いところを探すことだと思います。

id:yamadakouzi

ありがとうございます。段々桁数の多い時にも使えそうな方法が出てきた様で、先は明るくなってきました。

2008/09/01 00:21:27
id:s1g No.4

回答回数2ベストアンサー獲得回数1

ポイント30pt

各桁で先に割っておくというのでどうでしょう。

(100 = 17*5+15 だから 506/17 の余りは 15*5+6 = 81 だから余りは13とか。

10000 = 100 * 100 だから 15*15 = 225 は 2*15 + 25 = 55 と一緒で余り4

61235 なら 6*4+15*12+35 = 239 の余りと同じで 余り1)

・100の時点ですでに17の倍数になっていれば何倍しても17の倍数。

・数が増えると余りから17の倍数をもう一度切り取れる。

という二点を実際の物に例えたりして、説明できれば中学一年程度でも理解できると思います。

要するにやってることはmodを使った変形ですが。

id:yamadakouzi

私の狙いの方向の回答だろうと思います。

(目的をわざと伏せていましたが)つまり、少ない桁数の時は実際に割り算をしてもそんなに手間は掛からないだろうけど、何十桁もあるときの省力計算法を狙っていたわけです。

2008/09/01 00:29:35
id:tachibanahubuki No.5

回答回数7ベストアンサー獲得回数0

ポイント5pt

もうほかの方が答えてているかもしれませんが、

excelの関数を使うのは如何でしょうか。

=MOD(割られる数,割る数)で、

割る数に17を入れれば数字が出ます。

id:yamadakouzi

判定が難しいですね。PCを使うことは禁止しませんでしたが、MOD関数は他人がプログラミングしたものだと言うことで、除外したいのですが・・・。もっともMOD関数(剰余)の意味を理解して使用するのならば、そのやり方もOKとしなければなりませんが。今更ずるいのですが、あくまでも計算機は関数・他人作成のプログラミングの使用をしないと言うことにしたいのですが。

2008/09/01 00:41:02
id:ahirusan No.6

回答回数229ベストアンサー獲得回数3ここでベストアンサー

ポイント2pt

最も簡単なのは、プログラミングすることです。C言語でもJavaでもRubyでもOK!

余り = 対象数 % 17 ;

このコードはJavaであれば、そのまま(日本語のまま)使えます。

何にしても、この程度のプログラムは中学1年生でも理解できるでしょう。

id:yamadakouzi

本人がアルゴリズムを理解してプログラミングできればOKです。

2008/09/01 00:43:30
id:rsc96074 No.7

回答回数4503ベストアンサー獲得回数437

ポイント50pt

1. まず、マジックナンバーを用意します。一度計算すると、後で何回でも利用可能。

 これは、自分が計算しておいて、数字だけ天下り的に与えます。実は、Mod(10^n,17)。

1,10,15,14,4,6,9,5,16,7,2・・・

2. 1の位の数に1、10の位の数に10、100の位の数に15、1000の位の数に14、・・・をそれぞれ掛けて足します。(出た結果に何回か繰り返して使ってもよい。)

3. 出た結果を前回の方法を使って余りを求める。

(例)1234567890

1*7+2*16+3*5+4*9+5*6+6*4+7*14+8*15+9*10+0*1=452

 もう一回使ってみる。

4*15+52=112

 もう一回使ってみる。

1*15+12=27

 後は前回の方法。

27

17(-

-----

10

 原理的には上の方法ですが、面倒なら、3桁か4桁おきに計算してもいいです。

たとえば、3桁おきならば、マジックナンバーは、1,14,9,7・・・,4桁おきならば、マジックナンバーは、1,4,16・・・となります。

 計算の原理は、「中国の剰余定理」です。

http://ja.wikipedia.org/wiki/%E4%B8%AD%E5%9B%BD%E3%81%AE%E5%89%B...

id:yamadakouzi

私の求めていた、回答だと思います、これの考えならば除数が何になろうと使えそうです。

マジックナンバーは、3、9ならば1,1,1,1,・・・ 7ならば3,2,3*2=6(≡-1),-1*3=-3(≡=4),-2,-6(≡=1)以下繰り返しと言う具合と考えてよろしいのですね。

ちなみに13ならば、1,10、9(≡-4),12(≡-1),-10,-9,4,1 以下繰り返し

19ならば1、10(≡-9)、5、5*10=50(≡-7or12),-7*10=-70(≡13or-6),13*10=130≡-7*5=-35(≡-3or16),-3*10=-30(≡11or-8),-3*5=-15(≡4or-15),4*5=20(≡-1or18),9or-10,7or-12,-13or6,3or-16,-11or8,-4or15,1以下繰り返し{()内は前の値のほうが計算が簡単 }となります。

2008/09/01 19:42:05
id:ita No.8

回答回数204ベストアンサー獲得回数48

ポイント10pt

3に似てますが、100011が17の倍数というのも使えます。

一番左の数字を消し、同じ数字を左から5番めと6番めから引く(繰り下がりも計算)

というのを全体が5桁になるまで繰り返せます。

5桁になったら、102かな?一番左の数字を消し、それを二倍した数を左から3番めから引く。10以上になる場合は2番めから10の位を引く。これで2桁まで。

id:yamadakouzi

何か、前に有ったyahooの質問(7で割れる数の求め方)に考えが似てますね。これならば桁数が多い時、3の場合より面倒になりませんか。

2008/09/01 19:48:12
id:ROYGB No.9

回答回数70ベストアンサー獲得回数4

ポイント30pt

http://d.hatena.ne.jp/hiroyukikojima/20080831に「7の倍数」の判定法が書かれています。

結論からいうと、「十の位以上と一の位を切り離し、前者から後者の2倍を引く。この操作を繰り返して、2桁か1桁になって、それが7の倍数なら元の数も7の倍数」というものである。例えば、「343」を判定するなら、「34-3×2=28」が7の倍数だから元の「343」も7の倍数、ということになる。


このやり方が他の数にも応用できるということは

http://d.hatena.ne.jp/MarriageTheorem/20080831/1220183884

に書いてあるのですが、具体的な方法はありません。


それだと回答にならないので、方法を考えてみました。

17の場合は2倍でなく5倍を引くことで判定できます。

つまり

「十の位以上と一の位を切り離し、前者から後者の5倍を引く。この操作を繰り返して、2桁か1桁になって、それが17の倍数なら元の数も17の倍数」

ということです。

具体例をいくつか出せば、

374 なら 37-4*5=17 となるので17の倍数だということがわかります。

357 なら 35-7*5=0 で0になりますが、0も17で割って余り0だから17の倍数。

119 なら 11-9*5=-34 の-34は負の数ですが、これも17で割り切れるので17の倍数。


他の数、例えば11ならば、十の位以上と一の位を切り離し、前者から後者をそのまま引けば判定できます。

341 なら 34-1=33 なので11の倍数といった具合です。


19なら2倍して足すとか、わりと応用がききそうです。

id:yamadakouzi

紹介いただいた「7の倍数」の判定法についてはよく理解できません。

「つまり」から初めてしりました。下の部分は面白いと思います。除数と倍数(17-5)(11-1)(19-2)等の関係がわかれば応用性が有るとおもいます。

2008/09/03 23:32:14
  • id:yamadakouzi
    yamadakouzi 2008/08/31 10:09:34
    質問の訂正・追加  
    共通の方法として2、5に適用できる事は含まれていて良いです。
  • id:rsc96074
     マジックナンバーは、1,10,15,14,4,6,9,5,16,7,2,3,13,11,8,12,・・・で循環します。
    1,16に着目して、16の代わりに-1を使って、8桁ごとに区切って足したり引いたりした後、私の方法を試すのもいいかも。
    (例)123456789012345678901234567890の場合、
    -123456+78901234-56789012+34567890=56556656
    後は、前述の方法を使う。
  • id:ita
    17について。100000001が17の倍数ですね。10桁以上の数の場合はこれをつかって簡単に10桁まで減らせます。
    こういう数の求めかた:102が17の倍数だけど、もっといいのを探す時。
    1020=102*10も17の倍数のはず。ここから17引くと1003。これをまた10倍して10030、17を引いて10013。もう一回引くと9がたくさん出て面倒なんでストップ。また10倍して100130、17を引いていって100130-17*7=100011
    こんな感じで、なるべく0が多く、かけ算のいらない1だけの数字になるまで繰り返し。
  • id:yamadakouzi
    yamadakouzi 2008/09/01 20:23:34
    最初の設問、条件の提示が曖昧だった様に思います、一部の方に誤解を生んだようです。すみません。
    中学1年程度のレベルで、他人の考え(頭)を利用することなく、解ける方法だったらOKのつもりだったのですが。
    要するに、17を例として、その他の剰余の即算法を求めてほしかったのです。

    tachibanahubukiさん
    MOD関数は作成したことがありますが Mを被除数、Nを除数、Pを(切捨ての)商、Qを余り;いずれも整数 とした時
     M=N*P+Q  なので  Q=M-int(M/N)*Nとしました.従って=MOD(M,N)は演算の中に割り算は含まれました。(私のプログラミング上の話ですが)

    大体、私の意図した回答が出ましたので、この辺りで終了としたいのですが、もっとすばらしい考えが出るかもしれませんので、あと少し開けておきます。
  • id:imo758
    ROYGBさんの紹介した7の倍数判定法での2倍は
    21 = 7 x 3
    が元になっています。つまり下一桁が1になる倍数を使っています。
    ただしこれは割り切れない値に対しては剰余の値を変えてしまうので
    余りを求めるのにはかなり使いにくいでしょう。

    また17での5倍は
    51 = 17 x 3
    が元になっています。
  • id:yamadakouzi
    yamadakouzi 2008/09/04 00:40:44
    終了したいと思います。9名の方ありがとうございました。
    tso973さん ①は基本的な方法ですね。これなら小学生(引き算ができれば)できますね。「割り算は引き算の繰り返し、引ききれなくなったら余りが出る。」
          とは割り算の基礎。
          ②は17進法の表示方法がどうなるか(0~9、A~Gかな?)とにかく最終の数字だけで判断できますね。(電卓で入力できる桁数は不問)
          ③1倍から9倍の表で応用ができそうですね。(桁上がりを利用
    rsc96074さん 1 引けるだけ引くならばtso973さんの①と同じですのでそれだけで解決 2以降はいらないと思いますが。
    imo0758さん 例からすれば少し手順が複雑に見えます。汎用性はあるのでしょうか。
    s1gさん  MOD関数を利用するのではなくて、Modの考え方ができれば成功です。狙いはModの考え方を容易に理解させることです。
    tachibanahubukiさん Modの考えが理解できていていればよいのですが、ただ使うだけでは(すべての関数の意味が理解できていなければ使うなと言うのではなく、今回の問題の根幹そのものですから)
    ahirusanさん 平均的な中学1年ではこの問題のプログラム化は容易とは思えませんが、あなたの知り合いの秀才中学生の為に「要るか」賞を
    rsc96074さん マジックナンバーを出して各桁の数字とと乗数の和で判断できるのは汎用性のある方法だと思います。
           余りは(除数ー1個)以内で繰り返すことも確かですし。面白いことに7の時6個,11は2個、13は6個、17は16個、19は18個、23は22個、29は28個と続くのですが、31は15個、37はわずか3個(つまり999は37で割れる)、41は5個、43は21個、47は46個、53は13個、59は58個
    になるのですね。
    itaさん 簡単とも思えないですし、有用性もあまり理解できないのですが。
    ROYGBさん 面白そうですが除数と乗数の関係がわかりません。

  • id:imo758
    >yamadakouziさん
    rsc96074さんの仰るマジックナンバー論のうち倍率が簡素なところだけ使う、ということです。
    これで納得いただけるでしょうか。

    マジックナンバーを全て使用して計算しようとすると、各桁に対応するマジックナンバーを
    全て記憶しつつ計算しなければなりません。しかし簡単なところだけに限定して用いれば
    一時的に記憶しなければならない数字はずっと少なくなります。

    17におけるマジックナンバーは16個もあり全て用いて計算すると
    計算中に必要な数字を記憶し続けるのが大変ですが
    102を用いた計算なら一時的に記憶しなければいけない数字はたかだか4つ程度で容易に暗算できます。
    マジックナンバーを全て用いる方法より遥かに簡単ではないでしょうか。

    それとも簡単というのは、方法が常に使えてかつ正しいという証明が簡単という意味だったのでしょうか。
  • id:hkrhr1
     Excelの関数で、mod関数を使えば一発ではないでしょうか?
  • id:rsc96074
     マジックナンバー法も、17の場合、はじめ8桁おきに全体を計算して、次に4桁おきにと言った具合に計算した方がいいかも知れません。それにしても、17の場合、循環の真ん中らへんで16が出てきて、-1が使えたり、7の場合も循環の真ん中らへんで6が出てきて-1が使えたりと何か数の神秘を感じます。
  • id:yamadakouzi
    yamadakouzi 2008/09/05 00:12:05
    imo758さん あなたの回答の方法の有利性を私はよく理解できていないのだと思います。例が1つの数字だったので、もっと多くの数値でどれが一番簡単かをジックリ検証しようと思います。ほかの回答についても同様です。回答すべてを完全に理解しての評価でない事を、ご理解ください。

    「簡単」とは単純に「自分自身がどんな場所でも簡単に剰余が計算できる」と言うことで「証明・・・」と言うことではありません。
    マジックナンバー(MN)は数列を覚える必要はまったくありません。たとえば、17だとすれば1の位は1を掛ける、10の位は10をかけるのですが、(-7)でも良いのです(10-17=-7)、以下1桁上がるたびに前のマジックNoに10を掛けたすうがいくらのMNになるかを計算して、それを(高々除数-1)までのMNを計算してメモしてそれを繰り返し使うと言うものです。(高々除数ー1)と書きましたが除数59の場合は10の58乗まで計算することになりますからそんなのは記憶するレベルではありません、計算によって1つずつ求めてメモします。
    除数37なんて1、10、26(≡-11)の3つの数字になることもあります、でも記憶するものでは有りません。MNは除数にあわせてその場で計算します。だから覚えておく必要はないのです。
    また、MNは除数を引くとマイナスになります。その負のMNと正のMNを適当に使って和が大きくならないように計算してゆきます。-1になればそこが中間点です。
    ちなみにどのようにマジックナンバー(MN)を求めるか、簡単のため除数を7にして(誤魔化す訳では有りません)
    1の位 1 10の位10-7=3 で3 100の位3*3{=10のMN}=9(≡2)、1000の位2*3=6(≡-1)<=中間点です、以下 -1*3=-3、-1*2=(-3*3=-9≡)-2、1・・・となり以下は6桁ごとに繰り返す。
    11の場合は1、10(≡-1),1、-1の繰り返しです。だから奇数桁の数値の和と偶数桁の数値の和の差で剰余が求まるのです。(10以下になるまで演算を繰り返す)
    13の場合は1、10(≡-3)、9(≡-4)、12(≡-1)<=中間点 3(≡-10),4(≡-9),1・・・ 繰り返し

    17の場合は1,10(-7),15(-2),14(-3),4(-13),6(-11)、9(-8),5(-12),16(-1)<=中間点 7,2,3,13,11,8,12、1・・・繰り返し
    少し飛ばして31の場合は1,10,7,8,18(-13),25(-6),2,20(-11),14,16(-15),5,19(-12),4,9,28(-3)、1・・・繰り返し
    37の場合 1,10、26(-11)、1・・・繰り返し
    41の場合 1,10,18,16,37(-4)、1・・・繰り返し  となります。
    尚、除数2、3、5、9の場合は説明を省略しますが、同じ考えが成立します。
    2or5の時 1,0,0,0、・・・ 3or9の時 1,1,1,1、・・・ 
    合成数の場合はそれぞれの構成数の性質が入ります。(これも省略します・・・卑怯なようですが)
    が、同じ考えが成立します。


  • id:yamadakouzi
    yamadakouzi 2008/09/05 00:30:08
    hkrhr1さん、同じ回答をしたtachibanahubukiさんへの返信をお読み下さい。
    あくまで、計算者自身が計算の仕方を理解できていて、多数桁(何桁とは言いませんが)の被除数の剰余を簡単に出す方法として意見を求めたかった訳です。

この質問への反応(ブックマークコメント)

トラックバック

  • 剰余計算 実際に割り算をしないで17で割った余りをできるだけ簡単に求められる方法を教えてください。(中学1年まで程度の学力で理解できるレベル) 13でも19でもいいです。 ..
  • 余りを求める 人力検索はてなの質問question:1220144451に解凍したというのは「孤独な7の判別式一般化」にも書きました。でもコメントでの指摘にもある通り、割り切れるかという判定には使
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません