ABC114 D - 756
問題
解法
素因数分解してみる
かつ 100以下の最大の素数は97より、 を素因数分解すると、 のように素数のべき乗の積で表せます。 ここで、 は0以上の整数です。 の約数は、整数の組 を用いて、 のように素数のべき乗の積で表されます。
七五数を満たすパターン
さて、約数をちょうど75個持つ の約数について、 はどのような整数の組になるでしょうか。 まず、の約数の個数は です。 また、75をいくつかの数の積で表すと となります(順序が異なるものは省略)。 したがって、 が以下のいずれかのパターンを成す場合に、約数をちょうど75個持ちます。
- パターン1:
- パターン2:
- パターン3:
- パターン4:
パターン1の個数
パターン1を満たす の組数は、 のうち、74以上である値の個数です。
パターン2の個数
パターン2を満たす の組数は、以下の積です。
- のうち、24以上である値の個数
- ( のうち、2以上である値の個数) - 1
パターン3の個数
パターン3を満たす の組数は、以下の積です。
- のうち、14以上である値の個数
- ( のうち、4以上である値の個数) - 1
パターン4の個数
パターン4を満たす の組数は、以下の積です。
- ( のうち、4以上である値の個数 * (( のうち、4以上である値の個数) - 1)) / 2
- 4以上のpを2つ選ぶ組み合わせです
- ( のうち、2以上である値の個数) - 2
求める解
パターン1, 2, 3, 4の個数の和が求める解です。
ACしたコード
N = int(input()) p = [ sum(N // (i**k) for k in range(1, 8)) for i in range(2, 97 + 1) if all(i % j != 0 for j in range(2, i)) ] def f(m): return len([i for i in p if i >= m]) ans = f(74) + f(24) * (f(2) - 1) + f(14) * (f(4) - 1) + f(4) * (f(4) - 1) * (f(2) - 2) // 2 print(ans)