//高速化オプション #ifdef EARTH999 #define _GLIBCXX_DEBUG #else #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define NDEBUG #endif // 基本 #include #include using namespace std; using namespace atcoder; // 型名の省略 using ll = long long; using pii = pair; using pll = pair; template using vc = vector; template using vvc = vector>; template using vvvc = vector>; template using pq = priority_queue; template using pqg = priority_queue, greater>; template using ump = unordered_map; // 定数 template constexpr T INF = 0; template <> constexpr int INF = 1001001001; template <> constexpr long long INF = 1LL << 61; template <> constexpr double INF = INF; template <> constexpr long double INF = INF; // 便利関数 bool is_palindrome(const string& s) { return equal(s.begin(), s.end(), s.rbegin()); } template bool is_palindrome(const vector& s) { return equal(s.begin(), s.end(), s.rbegin()); } ll floor_sqrt(ll x){ ll y = sqrt(x); while (y * y > x) y--; while ((y+1) * (y+1) <= x) y++; return y; } bool is_sqrt(ll x){ ll y = floor_sqrt(x); if(y*y == x) return true; else return false; } ll pow_ll(ll a,ll b){ ll ret = 1; while(b > 0){ if(b&1) ret *= a; a *= a;b >>= 1; } return ret; } template T ceil(T a,T b){ return (a+b-1)/b; } //宣言兼入力 template istream& operator>>(istream& i,pair& p){ i >> p.first >> p.second; return i; } #define INT(...) int __VA_ARGS__; input(__VA_ARGS__); #define LL(...) long long __VA_ARGS__; input(__VA_ARGS__); #define DB(...) double __VA_ARGS__; input(__VA_ARGS__); #define CHAR(...) char __VA_ARGS__; input(__VA_ARGS__); #define STR(...) string __VA_ARGS__; input(__VA_ARGS__); #define VEC(type,a,n) vector a((n)); for(int i = 0;i < (n);i++) cin>>a[i]; #define VVEC(type,g, h, w) vector> g(h,vector(w)); for(int i = 0;i < h;i++) for(int j = 0;j < w;j++) cin >> g[i][j]; // 入出力処理 template void input(T &...a) { (cin >> ... >> a); } template void print(const T &a, const Ts &...b) { cout << a; (cout << ... << (cout << ' ', b)); cout << '\n'; } void print(){ cout << '\n'; } // 繰り返し処理 #define REP(i, n) for(ll i = 0; i < (ll)(n); i++) #define FOR(i, a, b) for(ll i = a; i < (ll)(b); i++) #define ALL(a) (a).begin(),(a).end() #define RALL(a) (a).rbegin(),(a).rend() #define SUM(s,a) vector s((a).size()+1); s[0]=0LL; for(int i = 0;i < (a).size();i++) s[i+1] = s[i]+a[i]; #define ZERO(a) for(int i = 0;i < (a).size();i++) a[i]--; #define MOD(a,b) (((a)%(b)+(b))%(b)) //a mod bを0以上m未満の形で表す。 // 配列処理 // 最小・最大処理 template inline bool chmax(T &a,U b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T &a,U b) { if (a > b) { a = b; return true; } return false; } // 追加ライブラリ /// ここからコードを書く int main() { cin.tie(0); LL(n,l,h) VEC(ll,c,n) ll ans = 0; for(int bit = 1;bit < 1<>b)&1) skb = (skb/gcd(skb,c[b]) > INF/c[b] ? INF : lcm(skb,c[b])); int pc = popcount((unsigned)bit); ll val = h/skb - (l-1)/skb; if(pc%2) ans += pc*val; else ans -= pc*val; } print(ans); return 0; }