長らく競プロ休止していましたが、リハビリ目的もかねて AtCoder ProblemsのBoot camp for Beginners で遊んでいます。 いい感じに苦戦したのでメモ。
問題
問題文
整数 が与えられます。 以下の正の整数の組 であって、 がすべて の倍数であるようなものの個数を求めてください。 ただし、 の順番を入れ替えただけの組も異なるものとして数えます。また、の中に同じものがあっても構いません。
制約
- は整数である
ACしたコード
using System; using System.Linq; using System.Collections.Generic; using static System.Console; using System.Text; using System.IO; using static System.Math; namespace AtCoder { class Program { static public long[] Sarray() { return ReadLine().Split().Select(long.Parse).ToArray(); } static void Main(string[] args) { var NK = Sarray(); var N = NK[0]; var K = NK[1]; var ans = 0L; ans = (N / K) * (N / K) * (N / K); if (K % 2 == 0 && K / 2 <= N) { var sel = (N - K / 2) / K + 1; ans += sel * sel * sel; } WriteLine(ans); } } }
考えたこと
について考えると*1
と書くことができる。ただし、 なら、 なら
について考えると
、 なので、
についても同様に考えると となるので、 *2
条件を満たす組み合わせを考えると
のときなので 通り
のときなので通り*3
その他
数式こねくり回さないでもちょいと条件ついけて全探索すればいけるようです
所感
解くのに1時間近くかかりましたが。こうやって書き出してみると簡単な問題な気がしてくる・・・