ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

“玲珑杯” 线上赛Round #17 B 震惊,99%+的中国人都会算错的问题

2019-05-04 20:42:40  阅读:211  来源: 互联网

标签:系数 gcd 17 上赛 int ll num lcm 算错


传送门

__debug神仙计数课件凑系数入门题,我又被锤了。

我们先不考虑奇数的限制,想一下怎么做。是不是可以将任意子集的lcm进行容斥,算是比较简单的容斥了。

然后我们思考一下,如何通过凑系数来满足奇数的限制。

打表/画韦恩图可知系数为\((-2)^{n-1}\),暂时还不会推系数的方法,先坑着。

#include<cstdio>
#define ll long long
int t,n,m,a[20];ll ans;
ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);}
void dfs(int num,ll lcm,int cnt){
    lcm=1LL*lcm*a[num]/gcd(lcm,a[num]);
    if(lcm>n)return ;
    if(cnt&1)ans+=1LL*n/lcm*(1<<(cnt-1));
    else ans-=1LL*n/lcm*(1<<(cnt-1));
    for(int i=num+1;i<=m;i++)dfs(i,lcm,cnt+1);
}
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&m);ans=0;
        for(int i=1;i<=m;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=m;i++)
            dfs(i,a[i],1);
        printf("%lld\n",ans);
    }
}

标签:系数,gcd,17,上赛,int,ll,num,lcm,算错
来源: https://www.cnblogs.com/yxc2003/p/10809667.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有