题目链接:http://acm.uestc.edu.cn/#/problem/show/1171

题解:

这道题应该从gcd出来的值入手。

我们要求所有子集的gcd的和
首先我们先统计一下每个数字出现的次数。
然后从大到小找,每次都可以算出来gcd是当前值的子集数量。
我们要这么做:假设当前算gcd=i的情况,我们把所有i的倍数的数统计一下,那么在这些数(假设有n个)里,我们只要选至少一个就可以得到gcd=(i的倍数)的情况总数(2^n-1)。但是这不是我们需要的i,需要减去大于i的且是i的倍数的情况数,幸运的是,我们是逆序算的,所以所有i的倍数的情况数都已经算过了。只要减去就可以了^_^,于是可以得到每个gcd的值的情况数,把它乘上对应gcd的k次方(这里需要快速幂)再求和就可以了。

代码:

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstdio>
#define MAX_N 2000006
using namespace std; typedef long long ll; int a[MAX_N];
int n; int T;
const int mod=; int cnt[MAX_N]; ll Pow(ll a,ll b) {
ll res = ;
while (b) {
if (b & )res = res * a % mod;
b >>= ;
a = a * a % mod;
}
return res;
} ll ways[MAX_N];
int k; int main() {
scanf("%d", &T);
while (T--) {
int maxA = -;
memset(a, , sizeof(a));
memset(cnt, , sizeof(cnt));
memset(ways, , sizeof(ways));
scanf("%d%d", &n, &k);
for (int i = ; i < n; i++) {
int t;
scanf("%d", &t);
maxA = max(maxA, t);
a[t]++;
}
for (int i = ; i <= maxA; i++)
for (int j = ; j * i <= maxA; j++)
cnt[i] += a[i * j];
for (int i = ; i <= maxA; i++)
ways[i] = (Pow(, cnt[i]) - + mod) % mod;
for (int i = maxA; i >= ; i--)
for (int j = ; j * i <= maxA; j++)
ways[i] = (ways[i] - ways[i * j] + mod) % mod;
ll ans = ;
for (int i = ; i <= maxA; i++)
ans = (ans + ways[i] * Pow(i, k)) % mod;
printf("%lld", ans);
if(T!=)printf("\n");
}
return ;
}

CDOJ 1171 两句话题意的更多相关文章

  1. 神级程序员通过两句话带你完全掌握Python最难知识点——元类!

    千万不要被所谓"元类是99%的python程序员不会用到的特性"这类的说辞吓住.因为 每个中国人,都是天生的元类使用者 学懂元类,你只需要知道两句话: 道生一,一生二,二生三,三生 ...

  2. 两句话掌握python最难知识点——元类

    千万不要被所谓“元类是99%的python程序员不会用到的特性”这类的说辞吓住.因为每个中国人,都是天生的元类使用者 学懂元类,你只需要知道两句话: 道生一,一生二,二生三,三生万物 我是谁?我从哪来 ...

  3. 两句话掌握 Python 最难知识点——元类

    千万不要被所谓“元类是99%的python程序员不会用到的特性”这类的说辞吓住.因为每个中国人,都是天生的元类使用者 学懂元类,你只需要知道两句话: 道生一,一生二,二生三,三生万物 我是谁?我从哪来 ...

  4. Leetcode884.Uncommon Words from Two Sentences两句话中的不常见单词

    给定两个句子 A 和 B . (句子是一串由空格分隔的单词.每个单词仅由小写字母组成.) 如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的. 返回所有不常用单 ...

  5. 简单两句话解释下prototype和__proto__

    先上两句代码: var Person = function () {}; var p = new Person(); 把new的过程拆分成以下三步: <1> var p={}; 也就是说, ...

  6. 两句话帮你彻底记住gdb之eXamining memory

    对于刚学习Unix/Linux环境C编程的小朋友们或者写了很多所谓的C代码的老手们(其实很可能是机械程序员或者是伪程序员)来说,要记住gdb的eXaming memory的语法其实是相当不容易的,如果 ...

  7. 领扣(LeetCode)两句话中的不常见单词 个人题解

    给定两个句子 A 和 B . (句子是一串由空格分隔的单词.每个单词仅由小写字母组成.) 如果一个单词在其中一个句子中只出现一次,在另一个句子中却没有出现,那么这个单词就是不常见的. 返回所有不常用单 ...

  8. 用sql合并列,两句话合为一句

    合并bc两列 UPDATE `test` SET `a`=concat(`b`,`c`) 清空a列 UPDATE `test` SET `a` = NULL

  9. [Swift]LeetCode884. 两句话中的不常见单词 | Uncommon Words from Two Sentences

    We are given two sentences A and B.  (A sentence is a string of space separated words.  Each word co ...

随机推荐

  1. python3爬取”理财大视野”中的股票,并分别写入txt、excel和mysql

    需求:爬取“理财大视野”网站的排名.代码.名称.市净率.市盈率等信息,并分别写入txt.excel和mysql 环境:python3.6.5 网站:http://www.dashiyetouzi.co ...

  2. 中移物联网onenet入门学习笔记2:中移物联的通信格式

    中移物联网硬件接入协议:LWM2M协议,EDP协议,MQTT协议,HTTP协议,TCP透传,MODBUS协议,JT/T808协议,RCMP协议 8种通信协议的区别在哪? 详细比较 EDP:OneNET ...

  3. leetcode-20-Dynamic Programming

    303. Range Sum Query - Immutable 解题思路: Note里说sumRange会被调用很多次..所以简直强烈暗示要做cache啊...所以刚开始,虽然用每次都去遍历数组求和 ...

  4. MySQL使用yum安装

    1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2.安装mysql-comm ...

  5. VR开发的烦恼——范围限制

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52230865 作者:car ...

  6. C++基础——1.变量和基本类型(基于c++11)

    C++11类型 基本类型 字面值常量(literal) 比如:一个形如42的值,即为常量 变量 初始值 初始化不是赋值,初始化是创建变量的时候给一个初始值:而赋值是擦除当前值,用新值代替. 列表初始化 ...

  7. MyInt的简单实现

    #include <iostream> using namespace std; class CMyInt{ private: int value; public: CMyInt(int ...

  8. 你应该知道的.net平台下socket异步通讯(代码实例)

    1,首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client 2,然后添加服务端代码,添加命名空间,界面上添加TextBox控件 using System.Net; ...

  9. Python面向对象(组合、菱形继承、多态)

    今日内容: 1.组合 2.菱形继承 3.多态与多态性 昨天内容重点回顾: 1)调用也叫实例化:发生了2件事  1.创造空对象  2.触发对象下的__init__方法,然后将p连同参数一同传给init  ...

  10. 【bzoj3210】花神的浇花集会 旋转坐标系

    题目描述 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花 ...