using System; using System.Collections.Specialized; using System.Linq; class Solution { static long GCD(long m, long n) { if (m < n) { return GCD(n, m); } while (n != 0) { var t = n; n = m % n; m = t; } return m; } static long DivisibleCount(long lo, long high, long div) { return high / div - (lo - 1) / div; } static void Main() { var vals = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); var n = vals[0]; var l = vals[1]; var h = vals[2]; var c = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); long sum = 0; // 包除原理により差集合を得る // n(1のみ) = n(1) - n(1∩2∪3∪..x) for (int pattern = 1; pattern < (1 << n); pattern++) { var bits = new BitVector32(pattern); long div = 1; var count = 0; for (int i = 0; i < n; i++) { if (bits[1 << i]) { div = (div * c[i]) / GCD(div, c[i]); count++; } } var set = DivisibleCount(l, h, div); if (count == 1) { sum += set; } else { // x∩なので正負反転 sum -= ((count % 2 == 1) ? -1 : 1) * set * (count); } } Console.WriteLine(sum); } }