- 作者: 西尾維新,VOFAN
- 出版社/メーカー: 講談社
- 発売日: 2009/06/11
- メディア: 単行本
- 購入: 33人 クリック: 191回
- この商品を含むブログ (322件) を見る
90 ページ上段から引用。
「なんでもいいから、好きな数字を思い浮かべてみな。110でも119でも、なんでもいいから。そんでそれを二回繰り返す」
「ふんふん」
「そうやってできた六桁の数字は、絶対に7で割り切れるんだとさ」
プログラミングネタをしばらく書いてなかった気がしたので、リハビリがてらやってみた。
まずは、絶対に7で割り切れることをざっくりと証明。
問題は要するに 1000 * X + X を 7 で割ると整数になるよ、ってことですね。1000 * X + X をちょっとバラしながら 7 で割ると 142X + (6/7)X + (1/7)X = 143X になるから整数になるよ、と。「(6/7)X + (1/7)X」のところがミソなんですね。計算自体は小学生でもできそうな計算だけど、ちょっと面白いなこれ。
C言語っぽくいうなら、(i % j == j - 1) が真だったら、今回の数学トリビア(?)に当てはまるようだ。というわけで、1000だけでなく100000まで確認してみたのが、以下。
#! /opt/local/bin/ruby # coding:utf-8 ary = [] 1.upto(5) do |i| i = 10 ** i 2.upto(i/2) do |j| if i % j == j-1 puts "#{i}:#{j}" ary << [i,j] end end end # 確認 ary.each do |a| a[0].times do |i| m = (i*a[0]+i) % a[1] #puts "#{i} * #{a[0]} + #{i} % #{a[1]} = #{m}" if m != 0 raise "#{i} #{a}" end end end
結果。
1000:7
1000:11
1000:13
1000:77
1000:91
1000:143
10000:73
10000:137
100000:11
100000:9091
というわけで、7だけでなく、11、13、77、91、143でも割り切れるらしいです。へぇー。
たぶん、もっと頭いい方法で解けるんだろうなーと思いつつ。バカを晒しておこう。循環小数っぽいけどよくわからん。数学むずかしいです>< 総あたり万歳!
もっと大きい数でもいけるけど、Ruby の Bignum の範囲に突入するとめっさ時間かかるよ!総あたり万歳!
1000:7
1000:11
1000:13
1000:77
1000:91
1000:143
10000:73
10000:137
100000:11
100000:9091
1000000:101
1000000:9901
10000000:11
10000000:909091
100000000:17
100000000:5882353
1000000000:7
1000000000:11
1000000000:13
1000000000:19
1000000000:77
1000000000:91
1000000000:133
1000000000:143
1000000000:209
1000000000:247
1000000000:1001
1000000000:1463
1000000000:1729
1000000000:2717
1000000000:19019
1000000000:52579
1000000000:368053
1000000000:578369
1000000000:683527
1000000000:999001
1000000000:4048583
1000000000:4784689
1000000000:6993007
1000000000:7518797
1000000000:10989011
1000000000:12987013
1000000000:52631579
1000000000:76923077
1000000000:90909091
1000000000:142857143
10000000000:101
10000000000:3541
10000000000:27961
10000000000:357641
10000000000:2824061
10000000000:99009901
ここまで出したところでマシンが悲鳴を上げだしたから止めたw