' P '

whatever I will forget

計算量考慮編(数式の変形)ABC179 C - A x B + C

atcoder.jp

うーんこういう問題、絶対解法思いつきませんw

思考の流れ

  1. まず全探索ではないことはすぐわかった(Nが106のため、O(N3)になる)
  2.  A \times B + C = N なので、A,B,Cの約数列挙かなー?
  3. ギブアップ

次に活かしたい点

こういう問題は、下記がポイントかも

  • 式をとりあえず変形してみる
  • 誰かの値(A、B、C)の値を固定し、全探索する

正解思考の1つ

A, B, Cは正整数とのことなので、A,B,Cに0は含まれない
例えば、 N = 3のとき、 A \times B の値が3 だったら C0になってしまう。
このことから、 Cは必ず1以上になるので、 N - A \times B \geq 1ということになる。
これをさらに変形させれば、 N - 1 \geq A \times Bとなり、 N - 1になるようなAとBの掛け合わせの組み合わせを考えればよいことに
ここで、ようやく Aを全探索し、 Bが何個あるかを導けばよい。
公式の解説でもあったが、 3 \times B \leq 100の場合、 \frac{100}{3} Bは33通りあるとわかるようなので、下記のコードとなる。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int ans = 0;
        for(int i=1; i<=n; i++) {
            ans += (n-1) / i;
        }
        System.out.println(ans);
    }
}