(ACM/ICPC 2008年日本国内予選問題B 改題)
で割った余りが である正整数は7⁢ℕ+1数と呼ばれる。しかし,発音しにくいので,月曜数と呼ぼう。
月曜数 , に対して、月曜数 が存在して が成り立つとき、 を の月曜約数と呼ぶ。月曜数 が月曜数 の月曜約数であるためには、 が の普通の意味の約数であれば必要十分であると、簡単に証明できる。
より大きな月曜数でそれ自身と の他に月曜約数をもたないものを、月曜素数と呼ぶ。普通の意味の素数である月曜数は月曜素数であるが、逆は一般に成り立たない。たとえば, は普通の意味の素数ではないが、月曜素数である。
月曜数 の月曜約数である月曜素数を、 の月曜素因数と呼ぶ。たとえば、 は月曜素数であり、 が成り立つので、 は の月曜素因数のひとつである.
より大きなどんな月曜数も、1個以上の月曜素数の積として表すことができる。表し方は、順序の違いを無視しても、必ずしも一通りではない。たとえば、 である。
から までの月曜数について月曜素因数の一覧表を出力するプログラムを書け。
出力は、小さい月曜数から順に行うものとする。まず、月曜数を表示し,つづけて同じ行にコロン「:」、そして、月曜素因数の並びを、それぞれの前に空白を置いて、小さい順に重複なく表示する。該当の月曜数を複数回割る月曜素因数も1回だけ出力する。
出力する表のうち、たとえば、 に対応する行は、次のようになる。
10648: 8 22 1331
(ただし、 と は整数、 は虚数単位)の形で表せる複素数をガウス整数と呼ぶ。ガウス整数とガウス整数の積はガウス整数となる。ガウス整数 でガウス整数 が割り切れるとは、あるガウス整数 が存在して、 が成り立つことと定義する。
ガウス整数は以下の四種類に分類できる。
ガウス整数の積を計算するプログラムを書け。整数 , , , を入力し、 となる整数 , を求めて出力せよ。
ガウス整数でガウス整数が割り切れるかを判定するプログラムを書け。整数
,
,
,
を入力し、
で
が割り切れるときは Oui
と、そうでないときは Non
と出力せよ。
ガウス整数のことをいったん忘れて複素数の範囲で計算すると、 となる。ここでガウス整数のことを思い出すと、 がガウス整数である必要十分条件は、 も も普通の意味の整数であることだとわかる。 したがって、 で が割り切れる必要十分条件は、 も も で割り切れることである。
ガウス整数を分類するプログラムを書け。整数 , を入力し、 の種類に応じて、以下の通り出力せよ。
種類 | 出力 |
---|---|
零 | Z |
単数 | U |
ガウス素数 | P |
ガウス合成数 | C |
ガウス整数 の分類と の値には、以下の関係がある。
ガウス整数 , , が をみたせば、 が成り立つ。 さらに を仮定すると、 が成り立つ。
ガウス整数 が零でも単数でもなければ、 を割り切るガウス整数は少なくとも八つある。うち四つは単数であり、残りの四つは に単数をかけたものである。零でも単数でもないガウス整数 を割り切るガウス整数がその八つ以外になければ はガウス素数であり、あればガウス合成数である。
この事実を利用すると、零でも単数でもないガウス整数 がガウス素数であるかどうかの判定には、 をみたすガウス整数 でのみ試し割りをすれば良いことがわかる。すなわち、 が をみたすどのガウス整数 でも割り切れなければガウス素数であり、どれか一つででも割り切れればガウス合成数である。
ガウス整数 と について、ある単数 が存在して が成り立つとき、ガウス整数 でガウス整数 が割り切れることと、ガウス整数 でガウス整数 が割り切れることは同値である。
ガウス整数 が零でなければ、ある単数 が存在して が成り立つガウス整数 は、ちょうど四つあり、そのうち、ちょうど一つが かつ をみたす。
以上の事実をうまく利用すると、 かつ かつ をみたすガウス整数 でのみ試し割りすることで、高速化が可能である。
Weisstein, Eric W. "Gaussian Prime." From MathWorld--A Wolfram Web Resource に、ガウス整数がガウス素数である必要十分条件が説明されている。
(ただし、 と は整数、 )の形で表せる複素数をアイゼンシュタイン整数と呼ぶ。アイゼンシュタイン整数とアイゼンシュタイン整数の積はアイゼンシュタイン整数となる。アイゼンシュタイン整数 でアイゼンシュタイン整数 が割り切れるとは、あるアイゼンシュタイン整数 が存在して、 が成り立つことと定義する。
アイゼンシュタイン整数は以下の四種類に分類できる。
アイゼンシュタイン整数の積を計算するプログラムを書け。整数 , , , を入力し、 となる整数 , を求めて出力せよ。
アイゼンシュタイン整数でアイゼンシュタイン整数が割り切れるかを判定するプログラムを書け。整数
,
,
,
を入力し、
で
が割り切れるときは Ja
と、そうでないときは Nein
と出力せよ。
アイゼンシュタイン整数のことをいったん忘れて複素数の範囲で計算すると、 となる。ここでアイゼンシュタイン整数のことを思い出すと、 がアイゼンシュタイン整数である必要十分条件は、 も も普通の意味の整数であることだとわかる。 したがって、 で が割り切れる必要十分条件は、 も も で割り切れることである。
アイゼンシュタイン整数を分類するプログラムを書け。整数 , を入力し、 の種類に応じて、以下の通り出力せよ。
種類 | 出力 |
---|---|
零 | Z |
単数 | U |
アイゼンシュタイン素数 | P |
アイゼンシュタイン合成数 | C |
アイゼンシュタイン整数 の分類と の値には、以下の関係がある。
アイゼンシュタイン整数 , , が をみたせば、 が成り立つ。 さらに を仮定すると、 が成り立つ。
アイゼンシュタイン整数 が零でも単数でもなければ、 を割り切るアイゼンシュタイン整数は少なくとも十二個ある。うち六つは単数であり、残りの六つは に単数をかけたものである。零でも単数でもないアイゼンシュタイン整数 を割り切るアイゼンシュタイン整数がその十二個以外になければ はアイゼンシュタイン素数であり、あればアイゼンシュタイン合成数である。
この事実を利用すると、零でも単数でもないアイゼンシュタイン整数 がアイゼンシュタイン素数であるかどうかの判定には、 をみたすアイゼンシュタイン整数 でのみ試し割りをすれば良いことがわかる。すなわち、 が をみたすどのアイゼンシュタイン整数 でも割り切れなければアイゼンシュタイン素数であり、どれか一つででも割り切れればアイゼンシュタイン合成数である。
アイゼンシュタイン整数 と について、ある単数 が存在して が成り立つとき、アイゼンシュタイン整数 でアイゼンシュタイン整数 が割り切れることと、アイゼンシュタイン整数 でアイゼンシュタイン整数 が割り切れることは同値である。
アイゼンシュタイン整数 が零でなければ、ある単数 が存在して が成り立つアイゼンシュタイン整数 は、ちょうど六つあり、そのうち、ちょうど一つが をみたす。
以上の事実をうまく利用すると、 かつ をみたすアイゼンシュタイン整数 でのみ試し割りすることで、高速化が可能である。
Weisstein, Eric W. "Eisenstein Prime." From MathWorld--A Wolfram Web Resource に、アイゼンシュタイン整数がアイゼンシュタイン素数である必要十分条件が説明されている。