问有多少个这样的数字序列

所有数的GCD等于x 并且 所有数的和等于y

题解:

非常难有思路啊 看题解后过的。

考虑序列GCD为x的倍数 即GCD = n*x 和当然都为y 这个条件不要忘了

这样我们可以用  容斥原理来递推的计算GCD为n*x的序列个数是多少

怎么计算呢

以样例为例子 3 9

当GCD = 3 的时候 可以有9 / 3 = 3 个3 序列是这样的 3 3 3

那么有三个空 用插板法 可以计算可以插板的方式数位2**(3-1) = 2**2 = 4种

这里解释插板的意义 3|3 3插一个板就表示相邻的数求和 那么3|3 3 就是 6 3

同理 3 3|3 -> 3 6; 3|3|3 -> 9; 但是这样插板出现了问题 就是出现了GCD 并不为3的序列 即 9

这个时候就需要用容斥原理来 递推

设a[i] 表示GCD为i的序列个数, a[j] 表示GCD为j个数

不妨设i > j

if (i % j == 0) a[j] = (a[j]+MOD-a[i]) % MOD; 因为 GCD 为i的情况是一定可以通过插板 得到GCD 为j的情况

而通过从大到小的递推 a[i]已经是容斥后的结果

这样最终得到GCD最小为x 的结果就是答案 网上题解写的有点不太清楚 这里自己补充点自己的理解。轻喷。。

代码君:

 #include <bits/stdc++.h>
#include <string.h>
#include <iostream>
#include <stdio.h>
#define pb push_back const int MOD = 1e9+;
const int MAXN = 1e5+;
typedef long long ll; using namespace std; ll x, y; ll mypow(ll base, ll p)
{
if (p == ) return ;
ll tmp = mypow(base, p/);
if (p & ) tmp = (tmp*tmp*base) % MOD;
else tmp = (tmp*tmp) % MOD;
return tmp;
}
vector<ll> a;
ll dp[MAXN];
int main()
{
//freopen("in.txt", "r", stdin);
while (cin >> x >> y)
{
a.clear();
if (y % x != )
{
cout << << endl;
continue;
}
for (ll i = ; i*i <= y; i++)
{
if (i % x == && y % i == ) a.pb(i);
if (i*i != y && y % i == && (y/i)%x== ) a.pb(y/i);
}
sort(a.begin(), a.end());
for (int i = ; i < a.size(); i++) dp[i] = mypow(, (y/a[i]-));
for (int i = (int)a.size()-; i >= ; i--)
for (int j = i+; j < a.size(); j++)
if (a[j] % a[i] == )
{
dp[i] -= dp[j];
dp[i] = (dp[i] + MOD) % MOD;
}
cout << dp[] << endl;
}
return ;
}

codeforces 900D 数论+组合+容斥原理的更多相关文章

  1. Codeforces 900D Unusual Sequences 容斥原理

    题目链接:900D  Unusual Sequences 题意: 给出两个数N,M.让你求数列(和为M,gcd为N)的个数. 题解: 首先,比较容易发现的是M%N如果不为零,那么一定不能构成这样的序列 ...

  2. [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理)

    [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理) 题面 一个\(n \times n\)的格子,每个格子里可以填\([1,k]\)内的整数. ...

  3. [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)

    [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...

  4. 卡特兰数 Catalan数 ( ACM 数论 组合 )

    卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1)  编辑 收藏 引用 所属分类: ACM ( 数论 ...

  5. Codeforces 451 E. Devu and Flowers(组合数学,数论,容斥原理)

    传送门 解题思路: 假如只有 s 束花束并且不考虑 f ,那么根据隔板法的可重复的情况时,这里的答案就是 假如说只有一个 f 受到限制,其不合法时一定是取了超过 f 的花束 那么根据组合数,我们仍然可 ...

  6. CodeForces 300C --数论

    A - A Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  7. CodeForces 359D (数论+二分+ST算法)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47319 题目大意:给定一个序列,要求确定一个子序列,①使得该子序 ...

  8. UVA 11806 Cheerleaders (组合+容斥原理)

    自己写的代码: #include <iostream> #include <stdio.h> #include <string.h> /* 题意:相当于在一个m*n ...

  9. Codeforces 264B 数论+DP

    题目链接:http://codeforces.com/problemset/problem/264/B 代码: #include<cstdio> #include<iostream& ...

随机推荐

  1. fei33423 工作 职场 格言

    对老板: 1.  老板不知道你做的事情(目标设定) 2.  老板要的是规划(对上报告), 自己给自己设定 金字塔四位下的目标,各种维度.如何细化. 2.1 明确老板期望 2.2 与老板达成共识 2.3 ...

  2. c++作业:输入两个整数,用函数求两数之和。函数外部声明有什么作用?

    #include <iostream> using namespace std; int main(){ //求两数的和? int a,b,s; cout<<"请你输 ...

  3. vue 前端判断输入框不能输入0 空格。特殊符号。

    oninput="value=value.replace(/[^\d.]/g,'').replace(/\.{2,}/g,'.').replace('.','$#$').replace(/\ ...

  4. 二叉搜索树详解(Java实现)

    1.二叉搜索树定义 二叉搜索树,是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值: 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根 ...

  5. 【dp】P1982 小朋友的数字

    有趣的细节题目 题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之 ...

  6. (73)zabbix用户认证方式 内建、HTTP Basic、LDAP

    公司大大小小众多系统,不同系统不同的账号密码,管理上相当复杂,后来慢慢出现了SSO等账号统一验证,其他zabbix也提供了类似的方法,或许有些公司便可以使用公司提供的账号来登录zabbix了. zab ...

  7. redis代理集群(Twemproxy)(1)

    redis主从+哨兵模式只解决了读的分布式操作,大大提高了性能:但是写操作,只有主主机器才能进行,从机器无法进行写操作.此时,Twemproxy也就出现了. 这个模式单纯的安装有些复杂,需要引入很多的 ...

  8. 《鸟哥的Linux私房菜》学习笔记(3)——根文件系统

    一.Linux目录结构 rootfs:根文件系统,根是"/". 1./boot 系统启动相关的文件,如内核.intrd.以及grub(bootloader) root@hao:~# ...

  9. [转载]关于typedef的用法总结

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多 的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一 ...

  10. LA 7072 Signal Interference 计算几何 圆与多边形的交

    题意: 给出一个\(n\)个点的简单多边形,和两个点\(A, B\)还有一个常数\(k(0.2 \leq k < 0.8)\). 点\(P\)满足\(\left | PB \right | \l ...