https://beta.atcoder.jp/contests/tkppc3/tasks/tkppc3_b
解法
https://beta.atcoder.jp/contests/tkppc3/submissions/2840738
6の倍数であることは、2の倍数かつ3の倍数であることを使えばいい。
よって、2,3,11の倍数であることを判別できれば良い。
2の倍数判定(is2関数)
最下位数が0,2,4,6,8であればいい。
最下位数が2の倍数であることを判定しよう。
3の倍数判定(is3関数)
各位の和が3の倍数であれば、その数は3の倍数である。
11の倍数判定(is11関数)
ぐぐるとこのサイトが見つかる。
このサイトによると偶数桁と奇数桁でそれぞれ各位の和を取り、その差が11の倍数であればいい。
これを実装する。
string N; //--------------------------------------------------------------------------------------------------- int is2() { char c = N[N.length() - 1]; if ((c - '0') % 2 == 0) return 1; return 0; } //--------------------------------------------------------------------------------------------------- int is3() { int sm = 0; fore(c, N) sm += c - '0'; if (sm % 3 == 0) return 1; return 0; } //--------------------------------------------------------------------------------------------------- int is11() { int sm[2] = { 0, 0 }; rep(i, 0, N.length()) sm[i % 2] += N[i] - '0'; int d = abs(sm[0] - sm[1]); if (d % 11 == 0) return 1; return 0; } //--------------------------------------------------------------------------------------------------- void _main() { cin >> N; if (is2() and is3()) cout << "yES" << endl; else cout << "nO" << endl; if (is11()) cout << "yES" << endl; else cout << "nO" << endl; }