Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- using namespace std;
- typedef long long llint;
- const int MAXN = 9;
- vector<int> v;
- int A, B;
- int ans = 0;
- inline void dodaj(int x, int k) {
- ans += k*(B/x);
- ans -= k*((A-1)/x);
- }
- int gcd(int a, int b) {
- return !b ? a : gcd(b, a%b);
- }
- void rec(int u, int x, int k) {
- if(x == (int)v.size()) return;
- rec(u, x+1, k);
- int g = gcd(u, v[x]);
- if(llint(u/g)*v[x] <= B) {
- dodaj((u/g)*v[x], -k);
- rec((u/g)*v[x], x+1, -k);
- }
- }
- int main(void) {
- for(int i = 1; i <= MAXN; ++i)
- for(int j = 0; j < (1<<i); ++j) {
- llint x = 0;
- for(int k = 0; k < i; ++k)
- if(j&(1<<k)) x = x*10 + 5; else
- x = x*10 + 3;
- v.push_back(x);
- }
- sort(v.begin(), v.end());
- for(int i = 0; i < (int)v.size(); ++i)
- for(int j = v.size()-1; j > i; --j)
- if(v[j]%v[i] == 0) {
- v.erase(v.begin()+j);
- }
- scanf("%d %d", &A, &B);
- rec(1, 0, -1);
- printf("%d\n", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement