9
競技数学解説
文献あり

素因数分解を利用した式変形

3687
0

今回は競技数学やってる人は大体知っているけどちゃんと言語化されているか怪しい事について書きます(なのでそこまで難しくは無いはず). IMOとかには出にくい内容かも知れないけどOMCには結構出そう.
まずは素因数分解について.

算術の基本定理, 素因数分解の一意性

全ての正整数nppvp(n)(pは全ての素数を渡る, vp(n)p毎に定まる非負整数で有限個を除いて0)の形に一意的に表示出来る.

ここでは素因数分解を利用して式変形が出来るという話をします.
次に, いろいろな数論関数の定義と基本的性質を確認します.

nを正整数, xを実数とする.

  • d(n)(=τ(n)=σ0(n))nの正の約数の個数とする.
  • σ(n)(=σ1(n))nの正の約数の総和とする.
  • σx(n)nの正の約数のx乗の総和とする.
  • φ(n)n以下でnと互いに素な正整数の個数とする.
  • ω(n)nの素因数の個数とする.
  • Ω(n)nvp(n)の総和とする.
  • μ(n)nが平方因子を含まないなら(1)ω(n), 含むなら0として定める. (メビウス関数)
加法的関数, 乗法的関数

関数a:NCが任意の互いに素な正整数m,nに対しa(mn)=a(m)+a(n)を満たすときaを加法的関数, a(mn)=a(m)a(n)を満たすなら乗法的関数という.
また任意の正整数m,nに対しa(mn)=a(m)+a(n)を満たすときaを完全加法的関数, a(mn)=a(m)a(n)を満たすなら完全乗法的関数という.

上の関数は加法的関数か乗法的関数の例になっている. この関数のクラスは約数全体に関する操作に対してとても良く振る舞う.

加法的関数, 乗法的関数の基本性質

a,bを加法的関数, c,dを乗法的関数とし, x,yを複素数とする. (ただし指数の分岐等が発生する場合は考えない)

  • xa(n)+yb(n)は加法的関数, xa(n)は乗法的関数, c(n)xd(n)yは乗法的関数, logxc(n)は加法的関数. (また完全同士の演算等で完全性は保たれる)
  • a(n)=pa(vp(n)), 特にaが完全加法的関数ならa(n)=pa(p)vp(n).
  • c(n)=pc(vp(n)), 特にcが完全乗法的関数ならc(n)=pc(p)vp(n).
  • d|nc(n)=pi=0vp(n)c(pi), 特にcが完全乗法的関数ならd|nc(n)=pc(p)vp(n)+11c(p)1.(c(p)=1のときは分数の値はvp(n)+1としておく)

この定理から分かるよう, これらの関数を扱う際素数毎に考えると言うことが有効な事が多い. σx,φが乗法的関数になっているのは組み合わせ的考察によって分かる. 他は定義から加法関数或いは乗法的関数である事は明らかだろう. あとは平方剰余記号が完全乗法的関数だったりする. あとはlogが加法的関数, 冪乗や恒等写像が完全乗法的関数である事に注意すれば良いだろう.

n=ppvp(n)を正整数, xを実数とする.

  • d(n)=p(vp(n)+1)
  • σ(n)=ppvp(n)+11px1
  • σx(n)=ppxvp(n)+11p1
  • φ(n)=p|npvp(n)1(p1)
  • d|nμ(d)={1 (n=1)0 (n>1)

少し例を見ていきましょう.まずは OMC107F .

OMC107F

正の整数mに対し, その正の約数すべての相加平均をf(m)で表します. amの正の約数であるとき, f(a)が常に整数になるような, 1以上100以下の整数mの総和を求めてください.

まずはf(m)が求まらないかと考えるとf(m)=σ(m)d(m)と書けます. これはもう素数毎に考えた方が良さそうなのでf(m)=ppvp(m)+11(vp(m)+1)(p1) としちゃいます. ここで条件をよく見るとnの任意の約数aについてとf(a)が整数になって欲しいと書いているのでpvp(a)+11(vp(a)+1)(p1)は整数になってくれそう. 実際素冪の素因数を考えれば良いですね. これで完全に素数毎に考えることが出来ます.
pを素数, vp(m)を正整数としたとき任意の正整数iについてpi+11(i+1)(p1)が整数になるp,mの条件を知ればよいです. ここでm100なのでp,iが大きい状況は考えなくて良く. 見通しが立ってきます.
(i) i=1のとき
p+12Zよりp2なら条件を満たす. 以下pは奇素数としてよい.
(ii) i=2のとき
そもそもp=3,5,7だけ考えればよい. 条件は3|p2+p+1だから条件を満たすのはp=7のときのみ.
(iii) i>2のとき
p=7しかあり得ないがm100以下なので考える必要は無い.
よって条件を満たすm2,9,25を因数として持たないもの. これは奇数全体から9,27,45,63,81,99,25,75を除いたものなので求める値は502962100=2076である.

約数系の議論で素数毎に考えるモチベーションが分かっただろうか, (素数毎に考えるのは約数系の議論に限らず例えば中国の剰余定理を使う問題とかも素数毎に考えようとすると上手く行くケースが多い)

次の 2021ChinaTST test3P4 もかなり典型的な使い方である.

2021ChinaTST test3P4

m=1n5ω(m)k=1nnkτ(k)2m=1n5Ω(m).
を示せ.

かなり約数系の議論をしそうである. さらにガウス記号系の関数(床, 天井, 割った商, 余り)は総和や階差をとると約数が絡んでくる場合が多いことを知っていると考察が進むだろう. ということで今回はnkτ(k)2を約数が絡んだ形で表すことを考えれば良さそうである. すると思いつくのはnkτ(k)2=kinτ(k)2と見なして和を取る順序を変えた
k=1nnkτ(k)2=m=1nd|mτ(d)2
を考えると良さそう. すると, 5ω(m)d|mτ(d)25Ω(m)っぽい気がする. これは全部乗法的関数なので素数毎に考えられそう! つまりd|mτ(d)2=pi=0vp(m)τ(pi)=pi=0vp(m)(i+1)2=p(vp(m)+1)(vp(m)+2)(2vp(m)+3)6

5ω(m)=p|m5,5Ω(m)=p5vp(m)に注意すれば(x=vp(m)と置き換えて)x1のとき5(x+1)(x+2)(2x+3)65xを示せば良い.(これは素冪の時の必要条件でもある5ω(m)d|mτ(d)25Ω(m)と同値)ここまで来たら何やっても示せますね. (指数関数>多項式を示す方法は二項定理, 帰納法, 微分が主な手法としてあるが今回は階差を取ると簡単になるので階差の大小を二項定理で示して帰納法を回すのが良いと思います)

ガウス記号と約数が絡む問題を置いておきます.
サーモン杯問題1

サーモン杯P1

数列{an}を次のように定めます.
a1=1
an=an/2+an/3++an/n (n>1)
a100=658です.a110を求めてください.

ごち数のこの問題 もそうですね.

Poland MO 2018 問4

nを正の整数とする. 平方因子をもたず, かつnkで割った商が奇数であるような, n以下の正の整数kは奇数個であることを示せ.

ごち数の解答では階差を考えていますが, ここでは自分が思いついた別解を紹介します.
まず, 奇数という条件が鬱陶しいです. これを解消するために何かが奇数個である事を示すならその何かに対応する奇数の値の総和が奇数である事を示せば良い. という定石を用いてkの総和が奇数である事を示そうとします.(丁度kが奇数という条件があったので) すると総和に偶数を足しても偶奇は変わらないので平方因子を持たないkn以下のものに対するnkの総和が奇数である事を示せば良いです. 平方因子の有無で変わるといえばメビウス関数μ(k)ですね. 丁度平方因子を持たないときも偶奇を変えないのでk=1nμ(k)nkが奇数である事を示せば良いということになります. ここで問題2と同じようにμ(k)nk=iknμ(k)として和の順序を交換するとk=1nμ(k)nk=m=1nd|mμ(d)=1(定理3)となって証明が終わります.

少しガウス記号から離れて別の問題を見ていきましょう.
2016ISLC2

2016ISLC2

正整数nであって全てのnの正の約数を長方形のマス目に以下の条件を満たすように書き込むことが出来るものを全て求めよ:

  • 各マスには相異なるnの正の約数が書き込まれている.
  • 縦の列に書かれた数の総和は全て等しい.
  • 横の列に書かれた数の総和は全て等しい.

ちょっと実験すればn=1以外はダメそうという気分になります. とりあえず状況設定として長方形のマス目の縦をa行, 横をb列とすると, ab=d(n)となります. ここから上手く行かなさそうという感覚を言語化していきます. まずマス目に条件を満たす書き込み方が存在すると仮定すると, nの約数の大きさはある程度均等にばらけている事が必要です.(というのもどの行(または列)で書かれている数の和が等しいので行ごとにある程度大きい値が必要) 一方nの約数は小さい値は多くて大きい値は少ないです. これはまずそう, だから約数の大きさ系の不等式評価をすれば良いですね. 不等式評価なのでa,bの大小関係も決めておいた方が良くてabとするとab=d(n)だからad(n)bとなります. さらにnがどこかのマスに書き込まれているので各列に書かれている数の総和はn以上なので鳩ノ巣原理を考えると各列にnb以上の元が書かれています. ここから先は全体に注目するか部分に注目するかで二通りの方法があります.
(i)全体に注目する方法
約数の総和はbnより大きいのでd(n)nσ(n)が成り立つはずです.これは素数毎に考えられそうな式なのでそのような変形をするとppvp(n)+11pvp(n)vp(n)+1(p1)>1となります.
ということでvp(n)=xとしてpx+11pxx+1(p1)を考察する. px+11pxx+1(p1)12(1+px1px(p1))<12(1+5px4px+1)542<1(p5のとき)
よりp=2,3を考える. p=3のとき33x2x+1の評価をすれば良い. x>1のときは明らかにこれは32<1未満. x=1のときは432<1となる.
p=2のとき, 2x+112xx+1の評価である. x3のときは2x+112xx+12x+112x+1<1と簡単に議論できる. x=1のとき値は322>1, x=2のとき値は743>1となる. 1を越えているのが少し厄介だが他の素因数が1未満なのでなんとか出来そう.
実際求まった上界達を小さい順に並べると32<542<432<743<322となっているので素因数が二つあるときあり得る最大の値は1であるのでn=2,4,6のときのみ考えれば良い. これらは明らかに上手く行かない. よって求める値はn=1のみ.

この方法は偶然上手く行った感のある解答である. 大きい約数が沢山あるという違和感を全部総和をとるという方法で表現していますが少し燃費が良くなさそうです. また, あまり約数を並べるという乗法を消化し切れた感じがしない. なのでppvp(n)+11pvp(n)vp(n)+1(p1)>1を作ってみるまで上手く行くかどうかは五分五分な気分でした. またコーナーケースもあって面倒だったですね. もっとモチベーションにしていた大小関係の違和感をもっと直接的に扱ってみましょう.

(ii)もう少し部分に注目する方法
大きい約数が沢山あるのがまずかったのでした. nb以上の約数がa個以上あるんですよね. 大きいと扱いにくいので小さくしたくて, これは約数dndに置き換えれば達成出来ます. これによってb以下の約数がa個以上ある事になります... これだとダメそうだけどa,b入れ替えても議論は成立するので入れ替えてみるとa以下の約数がb個以上ある事になります...これはヤバい. このままa=bを言い, n1からaまで約数持つから矛盾でも良いのですが, 以下が未満に変えれればそれで勝ちです. (n>1なので)各行b(>1)個の元があるので総和はnより大きくなります. だから鳩ノ巣原理よりnaより大きい約数がb個以上あって, これはa未満の約数がb個以上ある事になって矛盾. めでたしめでたし.

本当は(i)を書きたかったけど(ii)の方が明らかに筋が良いんですよね()

次, ISL2016N2 .

ISL2016N2

正整数nの正の約数のうち3で割って1余るものの個数をτ1(n)で表す.
τ(10n)τ1(10n) が取りうる正整数を全て求めよ.

これはとりあえずτ1(n)を考察してみたくなります.
n=3v3(n)p1(mod3)pvp(n)p2(mod3)pvp(n)と素因数分解します. p=3のとき3を素因数に持つ約数を3で割った余りは1にはならないので3の因数はτ1に関与しません. 次にp1(mod3)のときdpkd(mod3)だから3で割って1余るかどうかはdに依存し, 1余るならそれに対してk+1通りのpの指数の取り方が出来ます. なので結局因数vp(n)+1を持つことになります. 最後にτ1(p2(mod3)pvp(n))を考えます. さてこれをどう求めるか. 色々やり方はあると思いますが自分はOMCにありそうな母関数っぽいあれをやりました. 次の問題はみんな(1+1)n,(11)nの二項定理を使うと思います. それの類似です.

よくある二項係数の問題

k=02n2nC2kを簡単にせよ.

今回はτ(n)3で割って1余る約数の個数から3で割って2余る約数の個数を引くτ0(n)を考えます. すると嬉しいことにτ0(p2(mod3)pvp(n))=p2(mod3)k=0vp(n)(1)kこの値はvp(n)が全て偶数なら1でそうでないなら0です. だからnの全ての素因数を3で割った余りが2のときτ1(n)=τ(n)2が分かりました.
結局10n=3cab(ただしaの素因数を3で割った余りは1, bの素因数を3で割った余りは2)とするとτ(10n)τ1(10n)=(c+1)τ(b)τ(b)2となります. bが平方数でないならこの値は2(c+1)となるため全ての偶数は条件を満たします. bが平方数の時を考えれば良いのですこのときはτ(b),τ(b)2は互いに素なのでc=kτ(b)2となり, もとの分数はkτ(b)となります. これは10|bだから奇数の合成数と2×奇数の合成数全体を動くから, 求める答えは2と全ての合成数となる.
τ1が分かってしまえば場合分けとかは分かりやすいと思います.

後は練習問題を置いておきます. 問題提供とかあるとうれしいかも?
ISL2004N2 ISL2009N5 ABC212G OMC042D ELMOSLP2010N1

ゼータ関数のオイラー積

自分がこれを意識したのはゼータ関数のオイラー積について勉強したときなので少しだけ書きます.
ゼータ関数はζ(s)=n=11nsと表される関数ですが, これのオイラー積表示はまさにこの式変形を使っています. ζ(s)=limnσs(n!)=p11psという感じですね. (厳密には収束性や微分可能性についての議論がいりますが割愛)ということはゼータ関数の和の分子に乗法的関数を乗っけても上手くオイラー積が作れそう... 例えばルジャンドル記号を用いた場合はディリクレのL関数とか名前が付いてたり, より一般にもL関数という関数のクラスが沢山あり, 代数体の様々な性質を調べるために用いられているそうです.
この辺の記事 あたりを読んでみると面白いかも知れないです.

参考文献

投稿日:2022728
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

整数が好きです

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中