加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

BZOJ1853: [Scoi2010]幸运数字(容斥原理)

发布时间:2020-12-15 04:55:03 所属栏目:百科 来源:网络整理
导读:题意 询问区间$(l,r)$中有多少个数是只含$6,8$的数的倍数 Sol 思路很妙

题意

询问区间$(l,r)$中有多少个数是只含$6,8$的数的倍数

Sol

思路很妙啊。

首先在$10^{10}$内只含$6,8$的数有$sum_{i = 1}^{10} 2^i = 2046$个。

然后去掉相同的,应该是有$943$个。

之间算不好算,考虑用容斥原理。

但是直接容斥的复杂度很显然是$2^n$的

考虑剪枝!

当前的数大于上界,肯定要return

由于题目规定的数在$sqrt {10^{10}}$内也就十几个,因此是可以跑过的。

注意中间算lcm的时候是会爆long long的!我们需要先转成double,再判断

// luogu-judger-enable-o2

// luogu-judger-enable-o2

// luogu-judger-enable-o2

#include

#include

#include

#include

#include

#include

#define int long long

//#define int long long

using namespace std;

const int MAXN = 1e6;

inline int read() {

char c = getchar(); int x = 0,f = 1;

while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}

while(c >= '0' && c <= '9') x = x * 10 + c - '0',c = getchar();

return x * f;

}

int Mx = 10000000000LL;

vector a;

int flag[MAXN],vis[MAXN],b[MAXN],out,cnt;

void Pre(int now) {

if(now >= Mx) return ;

a.push_back(now);

Pre(now * 10 + 6); Pre(now * 10 + 8);

}

void dfs(int x,int opt,int l,int r,int pre) {

if(x > r) return ;

//printf("%I64dn",out);

out += opt * (r / x - l / x);

for(int i = pre + 1; i <= cnt; i++) {

int g = __gcd(x,b[i]);

if((double) (x / g) * b[i] > (double)r) return;

dfs(x / g * b[i],opt * -1,l,r,i);

}

}

int solve(int l,int r) {

out = 0;

for(int i = 1; i <= cnt; i++)

dfs(b[i],1,i);

return out;

}

main() {

Pre(6);

Pre(8);

//printf("%d",a.size());

for(int i = 0; i < a.size(); i++)

for(int j = 0; j < a.size(); j++)

if((i != j) && (a[j] > a[i]) && (a[j] % a[i] == 0)) flag[j] = 1;

//printf("%dn",si);

for(int i = 0; i < a.size(); i++)

if(!flag[i]) b[++cnt] = a[i];

sort(b + 1,b + cnt + 1,greater());

//for(int i = 1; i <= cnt; i++)

//- printf("%dn",cnt);

int a = read(),b = read();

printf("%lld",solve(a - 1,b) + 1);

return 0;

}

/*

2 10000000000

*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读