問題180 3と7の問題
2001 以下の正の整数のうち、一の位が3または7であるものすべての積をXとする。 Xの十の位を求めてください。
問題の出典
数学オリンピック
日本評論社
第21回日本数学オリンピック予選(2011年)
解答
〜到着順にご紹介します〜
解答・その1
(ペンネ−ム:T_Tatekawa)
十の位には百の位,千の位を含む掛け算は影響を与えないので,整数の下二桁に着目する.
つまり,1から100までを考える.ここで一の位が 3 または 7 であるものは
3, 13, 23,..., 93
7, 17, 27,..., 97
である.十の位と一の位を分離し,十の位が0にならない掛け算の部分を抜き出す
事を考える.
十の位を1回,一の位を19回掛けた掛け算と,一の位だけを掛けた掛け算だけになる.
(0+10+20+...+90) * 39 * 710+ (0+10+20+...+90) * 310 * 79
+ 310 * 710
= 450* 39 * 79 * (3+7) + 2110
となり,最後の 2110 だけが十の位に影響を及ぼす.
2110 = (20+1)10 = A * 100 + 10 x 20 x 19 + 110
= 100 A + 200 + 1
ここでAは自然数.
よって,1から100までで一の位が 3 または 7 であるものの積の下2桁は 01 になる.
2001以下の正の整数で,一の位が 3 または 7 であるものの全ての積の
下2桁は "01" の 20 乗なので,やはり "01" になる.
よって X の十の位は 0 である.
解答・その2
(ペンネ−ム:のっこん)
X=3・7・13・17・23・27・ ・・・・・・ ・1983・1987・1993・1997
3・7=21
13・17=221
23・27=621
・・・・・・・・・・
1983・1987=3940221
1993・1997=3980021
(1)Xの下2桁を求めるのに必要なのは各々についての下2桁である
(2)各々について下2桁は21である
(10a+3)(10a+7)=100a2+10a(3+7)+21=100(a2+a)+21
よって 21200 の下2桁を求めればそれがXの下2桁となる
211の下2桁は21
212の下2桁は41
213の下2桁は61
214の下2桁は81
215の下2桁は01
216の下2桁は21
・・・・・・・・・・・・・・
つまり、21mの下2桁は
m=5n の時 01
m=5n+1 の時 21
m=5n+2 の時 41
m=5n+3 の時 61
m=5n+4 の時 81
200=5n だから21200 の下2桁は01 よってXの十の位は0
※ 3+7=10 がポイントでしょうか?
※今年は2011年だから「2011以下」という問題にしてもよかったのではないかと思いました。
解答・その3
(ペンネ−ム:haya)
答: Xの十の位は 0 です
【解き方】
問題の対象は 1 から 2001 までの正の整数ですが、解は10の位の数値を求める問題なので、下2桁に注目してればよい。
1の位が3または7の数字の2桁以下の整数は、
3, 7, 13, 17, 23, …, 93, 97
ですが、これより大きな整数の10の桁より大きな数値は本問の積には無意味で、
Xの下2桁は上の97までの結果を周期的に繰り返す。従って、本問の解は、
3*7*13*17*23*…*93*97
の積の下2桁の数字を求めることと同じ。
上の図では都合の良いことに、
3*7, 13*17, …, 93*97
と2個ずつの組にすると100の剰余は何れも 21 となる。
同様に2個ずつ組み合わせた積の剰余を右の列に求めると 61。
最後にこの 61 と対になり損ねた 41 の積の100の剰余を求めると 1。
よって求める解は 0 である。
解答・その4
(ペンネ−ム:マシャ)
【解答】
3, 7, 13, 17, …, 1993, 1997と1の位が3または7の数字は同じ数だけある。
このペア(10a+3と10a+7とおく)をかけると
(10a+3)*(10a+7)=100a2+100a+21
となるので10の位は21のみに依存することなる
よって問題は21の200(a=0,1,…,199)乗の10の位を求めればいいことになる。
21200=(20+1)200
=20200+(200C199)20199*11+…+(200C1)201*1199+1200
となるので, 10の位は0
答え 0
(別解)
21の累乗の10の位と1の位を計算すると
21, 41, 61, 81, 01, 21と循環する。よって200乗の10の位は 0
解答・その5
(ペンネ−ム:スモークマン)
3も7も10の中に1組ずつあるから...2000/10=200組
3*7=21
21→212=41→213=61→214=81→215=01→216=21
25=01
200は5の倍数なので...
2200=(25)40=140=1
10の位は...「0」
解答・その6
(ペンネ−ム:夜ふかしのつらいおじさん)
一の位が3と7の数を2つずつペアにして並べてみます。
No | 三 | 七 | 積 |
---|---|---|---|
1 | 3 | 7 | 21 |
2 | 13 | 17 | 221 |
3 | 23 | 27 | 621 |
4 | 33 | 37 | 1221 |
・・・ | ・・・ | ・・・ | ・・・ |
199 | 1983 | 1987 | 3940221 |
200 | 1993 | 1997 | 3980021 |
この2つの積は下一桁が1になります。
上の表をみると、各行の積の下二桁が21になっています。これは、
(10k+3)(10k+7)=100k2+(70+30)k+21=100(k2+k)+21
より、納得できます。
十の位が分かれば良いので、21200 の計算を考えればよいことになります。
【考え1】
一の位が1の2桁の数の十の位は十の位の数の和になります。
(10m+1)(10n+1)=100mn+(10m+10n)+1=100mn+10(m+n)+1
211の十の位は2
212の十の位は4 (2+2)、
213の十の位は6 (4+2)、
214の十の位は8 (6+2)、
215の十の位は0 (8+2)
以降は、{2、4、6、8、0}の繰り返しです。
200は5で割り切れるので、答えは、0です。
【考え2】
(20+1)200 の十の位の数が分かればよいのでパスカルの三角形を考えます。
展開の201・1199の項の係数が200なので、十の位は0です。
解答・その7
(ペンネ−ム:エルドス)
答えは0です。10の位だけが知りたいので、かけるたびに下二桁にするようにして計算しました。
10進BASIC
CLEAR LET x=1 FOR i=1 TO 2001 IF MOD(i,10)=3 OR MOD(i,10)=7 THEN LET x=MOD(x*i,100) NEXT i PRINT x-MOD(x,10) END
解答・その8
(ペンネ−ム:浜田 明巳)
2001以下の一の位が3の正の整数
3,13,23,………,1993
と,2001以下の一の位が7の正の整数
7,17,27,………,1997
のすべての積を100で割った余りを10で割った商が答である.
積を計算するときには,それぞれのときの100で割った余りを求めるだけでよい.
この考えを用いてマクロを作った.
答は0である(積を100で割った余りは1になる).
Option Explicit Sub Macro1() Sheets("Sheet1").Select Dim X As Long Dim n As Integer Dim j As Integer X = 1 For j = 3 To 7 Step 7 - 3 For n = j To 1990 + j Step 10 X = (X * n) Mod 100 Next n Next j Cells(1, 1).Value = X \ 10 Range("A1").Select End Sub
解答・その9
(ペンネ−ム:ちょろんは太太)
積の結果の十の位を求めるので、百の位以上の部分は考えなくてよい。
十の位以上が同じで、一の位が3と7の整数の積は、
(M×10+3)×(M×10+7)=M2×100+M×10×(3+7)+21=(M2+M)×100+21
必ず、下2桁は、21になる。数値Xは、こうした下2桁が21の整数200個の積であるから
その下2桁は、 21200と一致する。二項定理を使うと、
第2項は 4000 第3項以降も 202を因数にもつので、下2桁は、00
従って、Xの下2桁は、01 になる。
(答え) 0
解答・その10
(ペンネ−ム:杖のおじさん)
答え 十位は0です
2001以下の数字の中に3と7は200個あります。
それらの積Xは次の通りです
X=3200×7200=21200
Xの十位を調べます。
211=21→2
212=441→4
213=9261→6
214=194481→8
215=4084101→0
216=85766121→2
217=1801088541→4
この検証の結果5で割り切れれば十位は0であると分かります。
200は5で割り切れますので十位は0となります。
解答・その11
(ペンネ−ム:まめ)
2011年も今月で最後・・・だから2011以下と思いきや、2001なんですね。
尤も、2001と2011では1セットしか違わないから、
2011なら答えは「2」なんですが、2001の問題として解きます。
出展が「算数オリンピック」なので、小学生が解くものとして、
まずは小学生でも分かりそうな解き方で。
一の位が3または7の数字を小さい方から順に取り出して、
2つずつ積を求めてみると、
3× 7= 21
13×17= 221
23×27= 621
33×37=1221
43×47=2021
53×57=3021
・・・
となり、下2桁が必ず21であることが分かる。
インド式計算法のアレですね。
さて、次にこれらの積を取っていく。
ただし、十の位を求めればよいから、計算結果の100以上の部分は無視して、
21× 221→21×21= 441→41
41× 621→41×21= 861→61
61×1221→61×21=1281→81
81×2021→81×21=1701→01
01×3021→01×21=21
なので、順番に掛けていくと十の位が2、4、6、8、0と循環することが分かる。
2001ということは、この繰り返しがちょうど40回なので、答えは「0」。
高校生くらいの人なら次のように解くのでしょうか。
まず、求める数は、
Π(10n+3)(10n+7)
と書ける。
但し、n=0〜199である。
この式を変形して、
Π(10n+3)(10n+7)=Π{100n(n+1)+21}=Π(100an+21)
=(100a0+21)(100a1+21)・・・(100an+21) → A式とする
A式を展開することを考えると、21n+1の項以外は全て100を因数に持つ
つまり、A式で十の位に関与するのは21n+1の項のみ。
n+1=mとして2項定理を用いると、
21m=(20+1)m
=mC0・20m+mC1・20m-1+
・・・+mCm-1・201+mCm・200
ここで、202=4・100なので、202以上の項もやはり全て100を因数に持つ。
そこで、A式を展開した際に100を因数にもつ全ての項から、
共通因数100を括り出した多項式をPとすると、A式は
Π(10n+3)(10n+7)=100P+20m+1
と書けることになる。
20mの一の位は0であるから、繰り上がりもない。
よって、計算結果の十の位に関与するのは20mの項のみである。
(十の位が偶数しか取り得ないことの証明にもなっている)
n=199より、20m=20(n+1)=20×200=4000なので、十の位は「0」
考察
これは一の位が足して10になることがポイントになっているようですので、
一の位が1と9とか、2と8とかでも考えてみました。
・1と9:Π(10n+1)(10n+9)=100P+9n
この場合は9nがポイントとなる。
が、9nの十の位なんて計算する方法はちょっと思いつかない。
実際に計算すると、910の十の位が0になるので、答えは「0」。
・2と8:Π(10n+2)(10n+8)=100P+16n
これもすぐには計算できなさそうですね。
ただ、これも実際に計算してみると、十の位は
1、5、9、3、7の繰り返しっぽいから、この場合の答えは「7」。
・4と6:Π(10n+4)(10n+6)=100P+24n
これまた実際に計算してみると、十の位は2と7の繰り返しになっており、
やはり答えは「7」。
・5:Π(10n+5)
これが一番難儀かも。
やっぱりこれも実際計算すると、十の位は最初の0の後、
7、7、2、2の繰り返しなので、最終的に「2」に行きつきます。
4と6の場合の十の位が2と7の繰り返しなのはなんか証明できそうですね。
暇なときにでもトライしてみよ〜っと。
解答・その12
(ペンネ−ム:Part Marty)
2001 以下の正の整数のうち、一の位が3または7であるものすべての積をXとする。
Xの十の位を求めてください。まず、Xの十の位を求めるのだから、100剰余演算を用いて考える。
下2桁だけを考えればよく、一の位が3の場合、03,13,23,33,43,53,63,73,83,93の積のmodを求める。
(3+0)*(3+10)*....*(3+80)*(3+90)=310+Σn*10*39+......2番目までの項を考えればよい。
mod(310,100)=mod(35,100)2=mod(43,100)2=49
mod(450*39,100)=mod(450,100)*mod(35,100)*mod(34,100)=mode(50*43*81,100)=50
よってmod(3+0)*(3+10)*....*(3+80)*(3+90),100)=49+50=99=-1であり
各要素が20個ずつあるので、
一の位が3の場合は、mod((-1)20,100)=1となる。
一の位が7の場合、07,17,27,37,47,57,67,77,87,97の積は、
-93-83,-73,-63,-53,-43,-33,-23,-13,-03の積であり、
(40+50)*(-1)10=99=-1であり、mod((-1)20,100)=1となる。
一の位が3と一の位が7の積は1となり、Xの十の位の数字は、0となる。
注)剰余演算:mod(m, n)整数 m を n で割ったとき、その剰余を示す。下記の様に、数式処理のソフトmaximaで確認しました。
kill(all); nnn:1$for a:0 thru 2 do for b:0 thru 9 do for c:0 thru 9 do for d:0 thru 9 do if d=3 or d=7 then nnn:mod((a*1000+b*100+c*10+d)*nnn,100) $nnn;
解答・その13
(ペンネ−ム:転位反応)
具体的に計算式を書き下してみると、以下の通り。
X=3×7×13×17×23×27×…×1993×1997
=(3×7)×(10+3)×(10+7)×(20+3)×(20+7)×…×(1990+3)×(1990+7)
=21×(100+30+70+21)×(400+60+140+21)×…×(3960100+5970+13930+21)
=21×(200+21)×(600+21)×…×(3980000+21)
さて、この計算式において、Xの十位に影響するのは21だけを全て掛け合わせたものである。
21は全部で200個あるので、21200 が検討の対象となる。
具体的に書き下してみると、以下の通り。
211=21
212=21×21=441
213=441×21=9261
ここで、十位に影響するのは下二桁の数字なので、441×21については、41×21を考えれば良い。
213 : 41×21=861
214 : 61×21=1281
215 : 81×21=1701
216 : 1×21=21
217 : 21×21=441
218 : 41×21=861
・・・
以上より、21nについて、n=1,2,3,4,5,6,7,8・・・に対して、十位の数字は、
2,4,6,8,0,2,4,6・・・と循環する。
∴ n=200の場合、十位の数字は0である。
∴ Xの十の位の数字は0である。
解答・その14
(ペンネ−ム:オヤジ)
求めるXの10の位の数は、積を取ると100以上の数は、100未満の数には影響しないので
: mod100 で考えれば十分である。そこで
3×13×23×33×43×53×63×73×83×93≡99≡−1 mod100 ・・(1)
同様に
97×87×77×67×57×47×37×27×17×7
≡(−3)×(−13)×(−23)×(−33)×(−43)×(−53)×(−63)×(−73)×(−83)×(−93)
≡3×13×23×33×43×53×63×73×83×93≡99≡−1 mod100 ・・(2)
従って
1〜100迄の1の位が3または7であるものの積で10以下の数は、(1) (2)より
3×13×23×・・・×93×7×17×27×・・・×97≡ 1 mod100 ・・(T)
よって 1〜2001以下の1の位が3または7であるものの積で10以下の数は、
(T)の20乗 従って
3×7×13×・・・×1993×1997≡ 120 ≡ 1 mod100
∴ Xの十の位の数=0
解答・その15
(ペンネ−ム:ソフィアアクトゥーダ)
X=3×7×13×17×23×27×・・・×1993×1997
=(3×7)×{(10+3)×(10+7)}×{(20+3)×(20+7)}×…×{(1990+3)×(1990+7)}
=21×(102 + 10×10 + 21) ×(202 + 20×10 + 21) ×・・・×(19902 + 1990×10 + 21)
これを展開すると、
X=100N+21200 (Nは整数)となる。
整数Mの下2桁をF(M)で表すと、
F(211) = 21
F(212) = 41
F(213) = 61
F(214) = 81
F(215) = 01
F(216) = 21
…
となるので,F(21200)=01
したがって,Xの十の位は0.
解答・その16
(ペンネ−ム:うめぞー)
百の位以上の数字にどんな整数をかけても十の位に影響しないのでmod100で考えればよい。
X=3×7×…×93×97×103×107×…×1993×1997
≡(3×7×…×93×97)×(3×7×…×93×97)×…×(3×7×…×93×97) ←カッコ20個
カッコ内について、aを0または一桁の自然数とすると
(10a+3) (10a+7)=100 (a2+a)+21≡21
より
(3×7)×…×(93×97)≡2110=((21×21)×(21×21×21))2≡(41×61)2≡12=1
よって
X≡120=1
求める数は十の位なので0
解答・その17
(ペンネ−ム:Ryu1128)
2001以下の正の整数の内、1の位が3と7の数を並べると
3,7,13,17,23,27,・・・・1993,1997
です。1から10までの間に1の位に1つづつ3と7が含まれるので
各々2001までに200個づつ出てきます・・・・・(1)
この数列の積を小さい順に2項ずつまとめます
X=(3×7)・(13×17)・(23×27)・(33×37)・・・・・・(1993×1997)
()を一塊と考え、i番目の積に着目します。
i番目の積は
((i-1)×10+3) ×((i-1)×10+7)
=((i-1)×10)2 + (3+7) ×((i-1)×10) + 3×7
=100 ×( (i-1)2 + (i-1)) + 21
となり、10の位は常に2、1の位は常に1となります100の位以上の部分は
Xの10の位に影響しませんから、Xの10の位を求めるには結局
21200・・・・・(2)
の10の位を求めればよいことが解ります。
ここで(2)を次のように変形し2項展開を考えて見ます。
(2)=(20+1)200
この2項展開で20のべき乗が10の位にとどまるのは1と0だけでその時の2項係数は200と1です。
つまり200×201×1199 + 1×200×120・・・(3)
を調べればよいわけでこれは4001となり10の位は0となります。・・・・答え
解答・その18
(ペンネ−ム:まろん)
答え: 0です。
計算機を使って解きました。
(define (seq start end) ; start -- inclusive end -- exclusive (if (>= start end) '() (cons start (seq (+ start 1) end)))) (define (remove test l) (apply append (map (lambda (e) (if (test e) '() (list e))) l))) (define (tens_digit n) (modulo (quotient n 10) 10)) (define (main args) (display (tens_digit (apply * (remove (lambda (n) (let ((r (modulo n 10))) (not (or (= r 3) (= r 7))))) (seq 1 2002))))) (newline))
scheme版プログラム
#includeintmain(){ int i, x; for (i = x = 1; i <= 2001; i++) { if (i % 10 == 3 || i % 10 == 7) { x = x * i % 100; } } printf("%d\n", x / 10); return 0;}
C言語版プログラム
どちらのプログラムも、問題文を素直に実行しているだけです。ただし、微妙に違いがあります。
scheme版プログラムは、最初に1〜2001のリストを作り、そのリストから一の位が3または7のものだけを
選んだ(別の)リストを作り、その要素のすべての積を(1147桁の数です)求め、その十の位を書き出しています。
一方、C言語版プログラムは、最初に、xを1にしておき、iを1から2001まで1づつ増やしながら、もし、
iの一の位が3または7だったら「x * i % 100」を計算しその値をxの新しい値として再設定、
最後に、その時点のxの十の位を書き出ています。
プログラムだけみればC言語版プログラムの方がシンプルにみえますが、それとは裏腹に、
「計算の手順」がこと細かく指示されていたりするうえ、最後の時点で、xの値がXの下二桁になっている
というのも、あまり自明ではありません。
解答・その19
(ペンネ−ム:迷子の雄猫)
2001 以下の正の整数のうち、一の位が3または7であるものの集合を
A{a1,a2,a3 , ....}とおき、集合Aに含まれる整数すべての積をXとする。
集合Aに含まれる整数は、w,x,y,zをそれぞれ0から9までの整数として
1000× w + 100× x +10×y + 3
または
1000× w + 100× x +10×y + 7
とあらわせる。
Xの十の位を求めるには、X mod 100 を計算すれば十分なので、積と剰余の性質
上、計算途中で100以上の位は無視してかまわない。
一の位が3である整数と一の位が7である整数は同じ数だけ存在するので、まず
213,217のように十以上の位が同じ数字同士の積を計算してみる。
(1000× w + 100× x +10×y + 3)×(1000× w + 100× x +10×y + 7) mod100
=(10×y + 3)×(10×y + 7) mod100
=(100×y×y+70×y + 30×y + 21) mod100
=(100×y×y+100×y + 21) mod100
=(21) mod100
よってXの十の位は21を何乗かした値の十の位である。さて、1から100の間には
一の位が3または7である整数がそれぞれ10個存在するので、Xの十の位はは21
の10乗を何乗かした値、つまり21の5乗の2乗を何乗かした値の十の位と同じである。
21の5乗は4084101であるので、Xの十の位は1を何乗かした値の十の位と同じであ
る。1を何乗しようが値は1のままなので、Xの十の位は0。
解答・その20
(ペンネ−ム:-hiryu)
一の位が3である数字と7である数字は、
それぞれ1〜10の中に1つずつ、11〜20の中に1つずつ、…、1990から2000の中にひとつずつある。
(10n+1)〜(10n+10)(ただし、0≦n≦199)の中で、
一の位が3である数字は10n+3、一の位が7である数字は10n+7とあらわされる。
これらをかけると、
(10n+3)(10n+7)
=100n2+(3+7)10n+21
=100(n2+1)+21
となる。
よって、どのようなnをとっても、(10n+1)〜(10n+10)(ただし、0≦n≦199)の中での
一の位が3である数字と7である数字をかけた数字の下二桁は21になる。
0≦n≦199であり、Xは2001以下の正の整数のうち、一の位が3または7であるものすべての積であるから、
その十の位は21の200乗と同じになる。
また、
211=21
212=441
213=441×21=9261
214=9261×21=194481
215=194481×21=4084101
2126=4084101×21=85766121
ここで、下二桁が21になったので、十の位に注目すると、
2 → 4 → 6 → 8 → 0 → 2 → ・・・
となり、 「2→4→6→8→0」 を繰り返している。
ここで、Xの下二桁は21200と同じであった。
200=40×5と表すことができるので、Xの十の位は0である。
解答・その21
(ペンネ−ム:三角定規)
1の位が3または7である連続する2数は10k+3,10k+7(k=0,1,2,…)と書ける。
これらの,小さい方から順に2n+2個の積をanと書くと
anの下2桁はanを100で割った余りであり,(1)より
(2)より,anの10の位は,n=0,1,… のとき,2,4,6,8,0,2,… と周期5で変化する。
求めるものはa1999の2の位で,n=0の2から数えて2000=5×400番目であるから,それは 0 …[答]
コメント
一の位が3の数を7の数をペアにして積を考えると、
必ず下2桁が「21」となっています。
(10k+3)(10k+7)=100k2+(70+30)k+21=100(k2+k)+21
「3+7=10」がポイントですね。これについては、まめさんが考察してくださいました。
この問題は、十の位を求めたいわけですから、下2桁だけに注目すればよいわけです。
ところが21の積を計算してみると、下2桁は周期的に変化をするから、後は21を何回かければよいかということに
帰着されるわけですね。
因みに、数学オリンピック予選問題のオリジナルは、「2011以下の」となっていますね。 したがって、解答は「2」です。失礼しました。