Java初心者の競技プログラミング日記

Dvorak配列でjavaを書いてます

倍数判定メソッド

long型に収まる数字ならlong型に入れて普通に割り算すればいいのだが、ここではlong型に入らない何千何万桁の数字が、ある数の倍数かどうかを判定するメソッドを紹介する。

static boolean isMultiple (String s, int base, int m) {
	int temp = 0;
	for (int i=0; i<s.length(); i++) {
		temp = (temp*base+Character.getNumericValue(s.charAt(i)))%m;
	}
	if (temp==0) {return true;}
	return false;
}


三つの引数の詳細
・String s → これから倍数かどうか判定する数。
・int base → その数の進数。11以上だと多分動作しない(アルファベットが混じるので)。
・int m → ある数。sはmの倍数であるか、ということ。


例題1:No.593 4進FizzBuzz - yukicoder
解説1:4進数nが与えられ、それが3,5,15の倍数であるか判定する。nの桁数は最大で100万桁なので、long型では判定できない。そこでこのメソッドを使う。それぞれisMultiple(n,4,3)、isMultiple(n,4,5)、isMultiple(n,4,15)とすれば倍数かどうかが求まる。


なお、十進数に関しては下1桁や下2桁を確認すれば倍数判定できるようだ。余裕があれば勉強したい。
倍数の判定法(2から12)とその証明一覧 | 高校数学の美しい物語