#428 Div2 D

题意

给出一些数,现在要求找出一些数满足 \(i_1 < i_2 < i_3 < ... < i_k\) 以及 \(gcd(a_{i_1}, a_{i_2}, ..., a_{i_k}) > 1\) ,记这些数的贡献为 \(k * gcd(a_{i_1}, a_{i_2}, ..., a_{i_k}) \) 。

求每种方案的贡献之和。

分析

不得不说和 hdu6053 很类似,其实还要简单不少。

考虑枚举 \(gcd\) ,我们可以找到因子有 \(gcd\) 这个数的数有多少个,假设有因子 \(2\) 的数有 \(x\) 个,那么这些数的贡献就是 \(2 * (1*C_{x}^{1}+2*C_{x}^{2}+..+x*C_{x}^{x})\) (通过打表可以发现规律),但是在枚举因子 \(2\) 的时候可能会把 \(2\) 的倍数作为因子形成的方案也考虑了,通过容斥去处理得到最后结果。

这里容斥类似于筛法的思想,实现和理解都更简单。

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 2e5 + 10;
const int N = 1e6 + 10;
const int MOD = 1e9 + 7;
ll num[MAXN];
int a[N];
ll has[N];
int main() {
ll e = 1;
for(int i = 1; i < MAXN; i++) {
num[i] = (num[i - 1] * 2 + e) % MOD;
e = e * 2 % MOD;
}
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
a[x]++;
}
ll ans = 0;
for(int i = N - 1; i >= 2; i--) {
int s = 0;
for(int j = i; j < N; j += i) {
s += a[j];
}
has[i] = num[s];
for(int j = 2 * i; j < N; j += i) {
has[i] = (has[i] - has[j] + MOD) % MOD;
}
ans = (ans + 1LL * i * has[i]) % MOD;
}
printf("%I64d\n", ans);
return 0;
}

Codeforces #428 Div2 D的更多相关文章

  1. Codeforces #180 div2 C Parity Game

    // Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...

  2. Codeforces #541 (Div2) - E. String Multiplication(动态规划)

    Problem   Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...

  3. Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)

    Problem   Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...

  4. Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)

    Problem   Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...

  5. Codeforces #548 (Div2) - D.Steps to One(概率dp+数论)

    Problem   Codeforces #548 (Div2) - D.Steps to One Time Limit: 2000 mSec Problem Description Input Th ...

  6. 【Codeforces #312 div2 A】Lala Land and Apple Trees

    # [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...

  7. codeforces round #428 div2

    A:暴力模拟,能加就加,如果累计到了8就加上,每次累积 #include<bits/stdc++.h> using namespace std; int main() { ; scanf( ...

  8. Codeforces #263 div2 解题报告

    比赛链接:http://codeforces.com/contest/462 这次比赛的时候,刚刚注冊的时候非常想好好的做一下,可是网上喝了个小酒之后.也就迷迷糊糊地看了题目,做了几题.一觉醒来发现r ...

  9. codeforces #round363 div2.C-Vacations (DP)

    题目链接:http://codeforces.com/contest/699/problem/C dp[i][j]表示第i天做事情j所得到最小的假期,j=0,1,2. #include<bits ...

随机推荐

  1. [洛谷P2482][SDOI2010]猪国杀

    题目大意:猪国杀,又一道大模拟题 题解:模拟,对于一个没有玩过三国杀的人来说,一堆细节不知道,写的十分吃力 卡点:无数,不想说什么了,这告诉我要多玩游戏 C++ Code: #include < ...

  2. [Leetcode] Reverse linked list ii 反转链表

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given1->2 ...

  3. git使用笔记(三)文件忽略

    By francis_hao    Nov 19,2016 注:此条所有内容均来自$ git help gitignore,细节请参考之   有时候在仓库里有一些文件我们并不想提交,git提供了指定屏 ...

  4. codeforces 719C. Efim and Strange Grade

    C. Efim and Strange Grade time limit per test 1 second memory limit per test 256 megabytes input sta ...

  5. 怎么把linux的磁盘映射到windows上

    步骤如下: 右击如下的computer: 然后选择:Map network drive... 然后在下图按图中所示操作: 最后成功如下图所示:

  6. WebOS系列-了解Wekbit【邓侃】

    注:[转载请注明文章来源.保持原样] 出处:http://www.cnblogs.com/jyli/archive/2010/02/02/1660634.html  作者:李嘉昱 这是Kan老大的We ...

  7. Spring 学习笔记(二)

      一.Spring 中的bean配置 –配置形式:基于 XML 文件的方式:基于注解的方式 –Bean 的配置方式:通过全类名(反射).通过工厂方法(静态工厂方法 & 实例工厂方法).Fac ...

  8. [洛谷P2730] 魔板 Magic Squares

    洛谷题目链接:魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都 ...

  9. 【洛谷 P2464】[SDOI2008]郁闷的小J(线段树)

    题目链接 这题我很久之前用分块写过,没写出来.. 今天又看到了,于是下决心把这题做出来. 这次我用线段树写的,直接对每本书的编号Hash一下然后离散化然后各建一棵线段树,维护当前编号在某个位置有没有书 ...

  10. bzoj 2120 线段树套平衡树

    先吐下槽,改了快一个小时,最后发现是SBT的delete写错了,顿时就有想死的心..... 首先对于这道题,我们应该先做一下他的小问题,bzoj1878,虽然和这道题几乎一点关系没有, 但是能给我们一 ...