【数学】百五減算と中国余剰定理

競プロに使いそうな数学
あくまで備忘録なんで雑に記録します

百五減算(年齢あてゲーム)例えば79
「あなたの年齢を 3 で割った余りを教えて下さい」と聞いて、例えば「 1 です」という答えを得る。同様に 5 と 7 で割った余りも尋ねてそれぞれ 4 , 2 であると教えてもらったとする。
そこで素早く 1 × 70 + 4 × 21 + 2 × 15 = 184 を計算し、184から105を引けるだけ引いていくと 184 – 105 = 79 となり、余りを聞いただけで「あなたの年齢は 79 歳ですね」と言い当てられるというわけである。
もちろんこの計算だけでは184歳である可能性もあるのだが、79歳か184歳かは相手を見ればすぐにわかるので、人間の年齢を当てるには十分である。

※中国剰余定理で考えれば、105以下でただ一つの解によって年齢を当てられる(105歳以上はちょっと・・・)

①一次不定方程式ax+by=cの整数解

2x + 4y = 1は存在しない
3x + 5y = 2は存在する

cが、a,bのGCMの倍数なら存在する!

つまりa, b互いに素なら、「ax + by = 1」が存在する

※中国剰余定理を解く準備として、ax + by = 1が必要だから存在するよ!ってこと

②一意性(105未満で79しかないよ)

与えられた二つの整数 m, n が互いに素ならば、任意に与えられる整数 a, b に対し、連立合同方程式
x ≡ a (mod m)
x ≡ b (mod n)
を満たす整数 x が mn を法として一意的に存在する

3で割ると2余り、5で割ると3余る数は、15未満では唯一、x = 8だよね剰余定理の基本
8 ≡ 2 (mod3)
8 ≡ 3 (mod5)

(2つ(PとQ)あったら、P – Qはm, nの公倍数で、mn以下ってのに矛盾するから、mn以下に1個)

※最終的には105以下で特定するために、
2 mod 3 / 3 mod 5 / 2 mod 7 っていう数字は唯1個だよねってこと

③中国剰余定理

『今物が有るが、その数はわからない。
3つずつにして物を数えると1余る、5で割ると4余り、7で割ると2余る。
物はいくつあるか?』

Ans = 3 + 1
Ans = 5m + 4
Ans = 7n + 2

①から、最初に求めておく
35x % 3 = 1
21y % 5 = 1
15z % 7 = 1
となる(x, y, z)=(2, 1, 1)
百五減算で言う(70, 21, 15)はこの35x, 21y, 15zのこと

35x × 1 + 21y × 4 + 15z × 2 = 184より、Ans = 79

【説明】
A % 3= a
A % 5= b
A % 7= c
35x % 3 = 1
21y % 5 = 1
15z % 7 = 1

コメント

"+r+""+h+""+">"}var c,i=n(45),u=n(74),f=n(64),s=n(53),p=n(76),l=n(41),y=(n=n(52),"prototype"),h="script",v=n("IE_PROTO"),g=function(){try{c=new ActiveXObject("htmlfile")}catch(r){}var r;g="undefined"==typeof document||document.domain&&c?function(r){r.write(a("")),r.close();var t=r.parentWindow.Object;return r=null,t}(c):((r=l("iframe")).style.display="none",p.appendChild(r),r.src=String("javascript:"),(r=r.contentWindow.document).open(),r.write(a("document.F=Object")),r.close(),r.F);for(var t=f.length;t--;)delete g[y][f[t]];return g()};s[v]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(o[y]=i(t),n=new o,o[y]=null,n[v]=t):n=g(),e===r?n:u.f(n,e)}},function(r,t,e){var n=e(5),o=e(44),a=e(43),c=e(45),i=e(11),u=e(75);t.f=n&&!o?Object.defineProperties:function(r,t){c(r);for(var e,n=i(t),o=u(t),f=o.length,s=0;s=t||56320!=(64512&i(r,e))))return!1}return!0}})},function(r,t,e){var n=e(91),o=String;r.exports=function(r){if("Symbol"===n(r))throw new TypeError("Cannot convert a Symbol value to a string");return o(r)}},function(r,t,e){var n=e(2),o=e(7),a=e(13),c=e(15),i=e(102),u=(e=e(6),Array),f=a("".charAt),s=a("".charCodeAt),p=a([].join),l="".toWellFormed,y=l&&e((function(){return"1"!==o(l,1)}));n({target:"String",proto:!0,forced:y},{toWellFormed:function(){var r=i(c(this));if(y)return o(l,r);for(var t=r.length,e=u(t),n=0;n
タイトルとURLをコピーしました