足跡-sokuseki-

りかの日進月歩の記録

「みんなのプロコン 2018」決勝 A - Uncommon

A - Uncommon

問題概要

 N 個の異なる整数  a_1 , … , a_N と整数  M が与えられる。
 1 以上  M 以下のそれぞれの整数  i について、 a_1 , … , a_N のうち  i と互いに素であるものの個数を求めよ。

制約

 1 \le N, M \le 10^5
 1 \le a_i \le 10^5

解法

ある数  X について、 a_1 , … , a_N のうち  X と互いに素であるものの個数を求めるとき、愚直に1つずつ試して O(N) でやると全体で O(N^2) となりTLEする。
よって、互いに素であるものをまとめて計算することを考える。
6と互いに素なものは2の倍数でも3の倍数でもないものであるということを考えると、 X と互いに素であるものは、 X の約数の倍数を全体から引いたものであると考えられる。
前計算として、
f[ i ] :=  a_1 , … , a_N のうち  i の倍数であるものの個数
を求めてあげることで、包除原理を使って  X と互いに素であるものの個数は高速に求めることができる。

Submission #2959906 - 「みんなのプロコン 2018」決勝