数学(GCD,计数原理)HDU 5656 CA Loves GCD
CA Loves GCD
CA喜欢是一个热爱党和人民的优秀同♂志,所以他也非常喜欢GCD(请在输入法中输入GCD得到CA喜欢GCD的原因)。
现在他有N个不同的数,每次他会从中选出若干个(至少一个数),求出所有数的GCD然后放回去。
为了使自己不会无聊,CA会把每种不同的选法都选一遍,CA想知道他得到的所有GCD的和是多少。
我们认为两种选法不同,当且仅当有一个数在其中一种选法中被选中了,而在另外一种选法中没有被选中。
第一行 T,表示有 T 组数据。
接下来 T 组数据,每组数据第一行一个整数 N,表示CA的数的个数,接下来一行 N 个整数 Aii 表示CA的每个数。
1≤T≤50, 1≤N≤1000, 1≤Ai≤10001 \le T \le 50,~1 \le N \le 1000,~1 \le A_i \le 10001≤T≤50, 1≤N≤1000, 1≤Ai≤1000
对于每组数据输出一行一个整数表示CA所有的选法的GCD的和对 100000007 取模的结果。
2
2
2 4
3
1 2 3
8
10 所有数据∈[1,1000]
令第i+1个数为v,当考虑dp[i][j]的时候,我们令dp[i+1][j] += dp[i][j],dp[i+1][gcd(j,v)] += dp[i][j]
复杂度O(N*MaxV) MaxV 为出现过的数的最大值。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=;
const int mod=;
int dp[maxn][maxn],a[maxn];
int Gcd(int a,int b){
return b?Gcd(b,a%b):a;
}
int main(){
int T,n,maxv;
scanf("%d",&T);
while(T--){
memset(dp,,sizeof(dp));
scanf("%d",&n);maxv=;
for(int i=;i<=n;maxv=max(maxv,a[i]),i++)
scanf("%d",&a[i]);
for(int i=;i<=n;i++)dp[i][]=;
for(int i=;i<=n;i++){
for(int j=;j<=maxv;j++)dp[i][j]=dp[i-][j];
for(int j=;j<=maxv;j++)
(dp[i][Gcd(j,a[i])]+=dp[i-][j])%=mod;
}
int ans=;
for(int j=;j<=maxv;j++)
(ans+=dp[n][j]*j)%=mod;
printf("%d\n",ans);
}
return ;
}
第二种方法的AC程序:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=;
const int mod=;
long long f[maxn],g[maxn],ans;
int main(){
int T,n;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
memset(f,,sizeof(f));
for(int i=,x;i<=n;i++){
scanf("%d",&x);
for(int j=;j<=x;j++){
if(x%j==)
f[j]++;
}
}
for(int i=;i<=;i++){
long long ret=;
for(int j=;j<=f[i];j++)
(ret*=)%=mod;
ret-=;
f[i]=ret;
}
for(int i=;i>=;i--){
g[i]=f[i];
for(int j=*i;j<=;j+=i)
(g[i]-=g[j])%=mod;
}
ans=;
for(int i=;i<=;i++)
(ans+=g[i]*i)%=mod;
printf("%lld\n",(ans+mod)%mod);
}
return ;
}
数学(GCD,计数原理)HDU 5656 CA Loves GCD的更多相关文章
- hdu 5656 CA Loves GCD(n个任选k个的最大公约数和)
CA Loves GCD Accepts: 64 Submissions: 535 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 2 ...
- HDU 5656 CA Loves GCD 01背包+gcd
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5656 bc:http://bestcoder.hdu.edu.cn/contests/con ...
- HDU 5656 CA Loves GCD dp
CA Loves GCD 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5656 Description CA is a fine comrade w ...
- HDU 5656 CA Loves GCD (数论DP)
CA Loves GCD 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/B Description CA is a fine c ...
- HDU 5656 ——CA Loves GCD——————【dp】
CA Loves GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- hdu 5656 CA Loves GCD
CA Loves GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- hdu 5656 CA Loves GCD(dp)
题目的意思就是: n个数,求n个数所有子集的最大公约数之和. 第一种方法: 枚举子集,求每一种子集的gcd之和,n=1000,复杂度O(2^n). 谁去用? 所以只能优化! 题目中有很重要的一句话! ...
- HDU 5656 CA Loves GCD (容斥)
题意:给定一个数组,每次他会从中选出若干个(至少一个数),求出所有数的GCD然后放回去,为了使自己不会无聊,会把每种不同的选法都选一遍,想知道他得到的所有GCD的和是多少. 析:枚举gcd,然后求每个 ...
- CA Loves GCD (BC#78 1002) (hdu 5656)
CA Loves GCD Accepts: 135 Submissions: 586 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: ...
随机推荐
- 运行yum报错:Error: Cannot retrieve metalink for repository: epel. Please verify its path
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again 当我们安装第三方扩 ...
- 21、javascript 基础
Javascript Javascript 是一种嵌入到HTML文档的脚本语言,由浏览器解释和执行,无需编译. Javascript 是大小写敏感的,大写字母与小写字母不同. 使用“:”分号来分割每一 ...
- 怎么让自己的java系统使用支付接口
昨天花了好久的时间学习了支付接口的教,我看了前7集,就够用了,大家上网搜索一下传智播客在线支付还不错. 1.一开始有一个form表单 2.这个表单是他帮你写好的,有很多银行,银行的name都是特定的 ...
- CSS3 颜色值HSL表示方式&简单实例
HSL色彩模式:就是色调(Hue).饱和度(Saturation).亮度(Lightness)三个颜色通道的改变以及它们相互之间的叠加来获得各种颜色,色调(Hue)色调最大值360,饱和度和亮度有百分 ...
- String or binary data would be truncated. The statement has been terminated.
常见的情况为:插入的值大于字段定义的最大长度. String or binary data would be truncated. The statement has been terminated
- OC - 19.GCD
简介 GCD(Grand Center Dispatch)是Apple为多核的并行运算提出的解决方案,纯C语言 更加适配多核处理器,且自动管理线程的生命周期,使用起来较为方便 GCD通过任务和队列实现 ...
- 开发自己的cordova插件
如果还没有配置过cordova环境,首先要下载nodejs,(下载地址https://nodejs.org/)下载完毕安装. 控制台: 1.输入npm -v 确定是否装上了 2.输入sudo npm ...
- Smart Client Software Factory安装
首先要安装 Visual Studio 2010 SDK 不然无法安装 Smart Client Software Factory 2010 然后按顺序安装 GAX 2010 http://visua ...
- 当INPUT 连续输入是连续触发
在 Web 开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理 ...
- phpcms v9 get调用标签整理
常见的phpcms标签调用 1.调用本系统单条数据(调用ID为1的信息,标题长度不超过25个汉字,显示更新日期): "select * from phpcms_content where ...