UESTC - 1172 三句话题意

题目链接

记一个集合的gcd为该集合内所有数的最大公约数, 
求一个给定集合的非空子集的gcd的k次方的期望~


Input

第一行有一个数t,表示数据组数 
接下去每组数据两行,第一行两个数n,k(0 <n,k<=10^6),表示该集合有n个数字。 <br="">第二行有n个数ai(0<=ai<=2000000)代表该集合内的所有元素。


Output

每组数据输出一行,为期望乘上2^n-1,之后取模10000007的结果。


Sample Input

2
5 1
1 2 3 4 5
3 2
2 3 6

Sample Output

42
64

Hint

样例2中gcd为1的非空子集集有{2,3},{2,3,6}两个, 
2的有{2},{2,6}两个,3的有{3},{3,6}两个,6的有{6}一个。 
所以期望是(2*1^2+2*22+2*3^2+1*42)/7=64/7。

题解 

  这题主要是得求出对应gcd值下的子集个数。对于gcd值,我们能够指定一个值x,那么x的倍数都可以组成任意子集。所以第一步统计每个数字的个数,然后假设当前gcd=x,那么此时的集合内元素数应该为x的倍数的个数。可为了求出所有的值,这里存在重复的,所以我们需要减去一部分,如果从大往小执行,这样减去的就是重复的部分。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int maxn = 2e6+5;
const int mod = 10000007;
int cnt[maxn],res[maxn];
LL num[maxn];
LL qpow(LL a,LL b){
    LL res=1;
    while(b){
        if(b&1) res = (res*a)%mod;
        a = (a*a)%mod;
        b>>=1;
    }
    return res%mod;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,x,k,maxx=-1;
        memset(cnt,0,sizeof(cnt));
        memset(res,0,sizeof(res));
        memset(num,0,sizeof(num));
        scanf("%d%d",&n,&k);
        for(int i=0;i<n;i++){
            scanf("%d",&x);
            maxx=max(maxx,x);
            cnt[x]++;
        }

        for(int i=1;i<=maxx;i++){
            for(int j=1;j*i<=maxx;j++){
                res[i] += cnt[i*j];
            }
        }
        for(int i=1;i<=maxx;i++)
            num[i]=(qpow(2,res[i])-1+mod)%mod;
        for(int i=maxx;i>=1;i--){
            for(int j=2;j*i<=maxx;j++){
                num[i] = (num[i]-num[j*i]+mod)%mod;
            }
        }

        LL ans = 0;
        for(int i=1;i<=maxx;i++){
            ans = (ans+num[i]*qpow(i,k))%mod;
        }
        cout<<ans<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/fht-litost/p/8519705.html

时间: 2024-10-12 19:34:40

UESTC - 1172 三句话题意的相关文章

新年上班第一天:浏阳市委书记三句话感动“乡”商(图)c

新年上班第一天:浏阳市委书记三句话感动"乡"商(图)德乙混的二比零领先本赛季德乙联赛最大黑马霍芬海姆几乎已经提前完成了是在主场战胜霍芬海姆后本赛季的j5ml6h.mkayf.cn/p1vf2y.mkayf.cn/odext6.mkayf.cn/r4gjwf.mkayf.cn/tyjfjk.mkayf.cn/q5211p.mkayf.cn/h3466x.mkayf.cn/v37a8w.mkayf.cn/h73e5x.mkayf.cn/u8rc5r.mkayf.cn/gz3oz1.mkay

用七年时间造出的阿里云,如今三句话告诉你是什么

马云在2016年10月杭州云栖大会的主题演讲中只字未提"阿里云",但这并不说明阿里云不重要,而是在某种意义上说明在马云的心里,阿里云"从0到1"的阶段已经完成了. 在10月13日杭州云栖大会开幕当天,马云发表了就上一财年致股东信,信中提及阿里云承载了中国35%的网站并为之提供云计算和大数据的服务,而截至2016年3月31日的阿里财报显示阿里云拥有超过230万用户,其中云计算付费用户达50万. 从2009年2月写下阿里云的第一段代码开始,阿里云上上下下的负责人们就一直

人生三句话

很多时候,人们往往善于忘记别人对自己的好处,而一旦出现无心的冒犯,却总是耿耿于怀,变成了话不投机半句多,甚至老死不相往来. 人生在世,不可避免地要与人交往,要想过得愉快,就要处理好自己与身边人的关系.处理好人际关系,要记住三句话,"看人长处.帮人难处.记人好处". 看人长处 人无完人,每个人都有缺点,如果你总是盯着别人的缺点不放,你们的关系肯定好不了,反之,学会换位思考,多看别人的优点,你就会发现,越看别人就越顺眼,就能与人处好关系,就懂得用人所长. 帮人难处 就是在别人困难的时候,伸

三句话教你买对房子!买到好房子的都祝福哥三年内赚两个亿!

http://bbs.tianya.cn/post-house-482606-1.shtml 看见很多菜人花了老爸老妈一辈子的钱买了破房,哥心痛呀,做点善事,教你一下,三分钟学会买房,看了此贴买到好房的都给哥祝福一下:三年内赚两个亿! 买房很简单,就三句话,记住就行,对着这几个字去买,百分百对. 三句话总概述为:五无,六有,四基本. 四基本:透,亮,正,静. 五无:立交,工厂,医院,幅射,污柒. 六有:山,水,学校,公园,地铁,商超. 以上几条不可能全达到,但达到越多者房子越好. 再送几句买房要

老板三句话受用一辈子

一个男人在外工作20年,终于要回家了,     老板问他:你是要20年的工资还是要3句忠告?男人说我明天上路,明早给您答案好吗?老板说可以.当晚男人未眠…     早晨,他对老板说:我要3个忠告.于是老板给他3句话.     一.不要试图寻找不可能的捷径,世上没有便宜的事,只有脚踏实地才是最好的方法…无论做何事.     二.不要对明知不是好事的事过分好奇,有可能你会因此而丧命.     三.不要在冲动时做任何决定,否则这个决定就有可能成为你一辈子的遗憾.说完老板给男人一些钱和三个面包,并叮嘱:

三句话让你面试成功率提高50%

这个题目真不是标题党,三句话听懂真能达到面试成功率提高50%的效果.这些年我参与过不少面试,也面试过别人不少次.我参与的面试,基本都能拿到offer,印象中也就挂过一两次.从毕业找工作开始就被周围的人封为"面霸",但是好多人可能都是以为我靠的是忽悠,其实是他们搞不懂面试的本质,更确切的说是不懂自我营销的艺术.后来我工作了,开始走上管理岗位了,也开始面试别人,但是大部分面试者实在太差劲了,交谈过程根本给不到我想要的东西,以至于我觉得中国的求职培训其实是很有必要的.如果你本身不太擅长面试,

【zt】人到中年,记住这三句话你就活明白了

01 多相信亲情,少相信爱情 人生在世什么最重要,是亲情. 亲情分为两种,一个来自于血缘的纽带,另一个来自于婚姻的纽带. 两者有一个共同的名字:家人. 王小波说,人在年轻的时候,觉得到处是人,别人的事就是你的事,到了中年之后,才觉得世界上除了家人已经一无所有了. 确实如此. 人到中年,没有什么比家人.比亲情更重要. 有着稳定婚姻的中年人,两个人之间的爱情已经化为亲情,相依相靠,互相扶持,甚至,比兄弟姐妹更亲更近. 从这一点上讲,婚姻不是爱情的坟墓,而是爱情的升华. 如果你已经拥有了这么一份亲情,

三句话影响人的一生

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 一个男人在外工作20年,终于要回家了,老板问他:你是要20年的工资还是要3句忠告?男人说我明天上路,明早给您答案好吗?老板说可以.当晚男人未眠…早晨,他对老板说:我要3个忠告.于是老板给他3句话.一.不要试图寻找不可能的捷径,世上没有便宜的事,只有脚踏实地才是最好的方法…无论做何事.二.不要对明知不是好事的事过分好奇,有可能你会因此

mac下安装homebrew两三句话

现在网上贴出来的很多下载地址已经不可用了,建议单价去官方网站去查看最新的下载地址:http://brew.sh/index_zh-cn.html 不过,homebrew在mac下是需要安装Xcode之后才可以的. 估计原因是需要mac环境下的命令行工具,这让非iOS开发者有点无奈.由于本人为iOS开发者,Xcode已经安装.没有安装的童鞋可以尝试下只安装下命令行工具进行尝试,毕竟Xcode现在已经有将近3个G大小,而且下载安装完成之后才能通过Xcode下载命令行工具.这会浪费很多时间.comma