AtCoder Beginner Contest 131 C - Anti-Division【Python】
https://atcoder.jp/contests/abc131/tasks/abc131_c
AtCoder ProblemsのRecommendationで Difficulty: 518、Solve Probability: 40%でした。
似たような問題を以前解いた記憶があったため、それほど時間がかからず解くことができました。
import math A, B, C, D = map(int, input().split()) # CとDの最小公倍数 lcm_cd = C * D // math.gcd(C, D) # A以上B以下の整数のうちCで割り切れるものの個数 cn = B // C - (A - 1) // C # A以上B以下の整数のうちDで割り切れるものの個数 dn = B // D - (A - 1) // D # A以上B以下の整数のうちCとDの最小公倍数で割り切れるものの個数 lcmcdn = B // lcm_cd - (A - 1) // lcm_cd # A以上B以下の整数の個数から上記を加減すると答え print((B - A + 1) - (cn + dn - lcmcdn))