0918

<=1>=8的情况。

<=1X>=8Y组排列。那么通过容斥原理来解决就可以写成:

即:

二.

n0121次,这样的序列有多少种?

同样的,我们转向它的逆问题。也就是不出现这些数字的序列 不出现其中某些数字的序列。

Ai(i=0…2)i的序列数,那么由容斥原理,我们得到该逆问题的结果为:

可以发现每个Ai的值都为2^n(因为这些序列中只能包含两种数字)。而所有的两两组合

都110。(因为它不包含数字,所以不存在)

要记得我们解决的是它的逆问题,所以要用总数减掉,得到最终结果:

三.

方程整数解问题

给出一个方程:

其中

求这个方程的整数解有多少组。

我们先不去理会xi<=8的条件,来考虑所有正整数解的情况。这个很容易用组合数来求解,我们要把20个元素分成6组,也就是添加5块“夹板”,然后在25个位置中找5块“夹板”的位置。

然后通过容斥原理来讨论它的逆问题,也就是x>=9时的解。

我们定义Ak为xk>=9并且其他xi>=0时的集合,同样我们用上面的添加“夹板”法来计算Ak的大小,因为有9个位置已经被xk所利用了,所以:

然后计算两个这样的集合Ak、Ap的交集:

因为所有x的和不能超过20,所以三个或三个以上这样的集合时是不能同时出现的,它们的交集都为0。最后我们用总数剪掉用容斥原理所求逆问题的答案,就得到了最终结果:

四.

求指定区间内与n互素的数的个数:

nr[1;r]n互素的数的个数。

n互素的数的个数。

npi(i=1…k)

[1;r]pi整除呢?它就是:

然而,如果我们单纯将所有结果相加,会得到错误答案。有些数可能被统计多次(被好几个素因子整除)。所以,我们要运用容斥原理来解决。

我们可以用2^k的算法求出所有的pi组合,然后计算每种组合的pi乘积,通过容斥原理来对结果进行加减处理。

关于此问题的最终实现:

int solve (int n, int r)

{

vector p;

for (int i=2; i*i<=n; ++i)

if (n % i == 0)

{

p.push_back (i);

while (n % i == 0)

n /= i;

}

if (n > 1)

p.push_back (n);

int sum = 0;

for (int msk=1; msk

{

int mult = 1,

bits = 0;

for (int i=0; i

if (msk & (1<

{

++bits;

mult *= p[i];

}

int cur = r / mult;

if (bits % 2 == 1)

sum += cur;

else

sum -= cur;

}

return r - sum;

}

五.

素数四元组的个数问题

个数

,从其中选出4个数,使它们的最大公约数为1,问总共有多少中取法。

我们解决它的逆问题:求最大公约数d>1的四元组的个数。

运用容斥原理,将求得的对于每个d的四元组个数的结果进行加减。

其中deg(d)代表d的质因子个数,f(d)代表四个数都能被d整除的四元组的个数。

求解f(d)时,只需要利用组合方法,求从所有满足被d整除的ai中选4个的方法数。

然后利用容斥原理,统计出所有能被一个素数整除的四元组个数,然后减掉所有能被两个素数整除的四元组个数,再加上被三个素数整除的四元组个数…

六.

和睦数三元组的个数问题

。选出a,

b, c (其中2<=a

· 或者满足

·或者满足

首先,我们考虑它的逆问题:也就是不和睦三元组的个数。

然后,我们可以发现,在每个不和睦三元组的三个元素中,我们都能找到正好两个元素满足:它与一个元素互素,并且与另一个元素不互素。

所以,我们只需枚举2到n的所有数,将每个数的与其互素的数的个数和与其不互素的数的个数相乘,最后求和并除以2,就是要求的逆问题的答案。

2n2n所有数的结果,分别求解显然效率太低。

2n所有数的结果。

在这里,我们可以使用改进的埃拉托色尼筛法。

·首先,对于2到n的所有数,我们要知道构成它的素数中是否有次数大于1的,为了应用容斥原理,我们还有知道它们由多少种不同的素数构成。

deg[i]igood[i]truefalsei1是否成立。

i2ndeg[]igood[]false。

·然后,利用容斥原理,求出2到n每个数的cnt[i]:在2到n中不与i互素的数的个数。

回想容斥原理的公式,它所求的集合是不会包含重复元素的。也就是如果这个集合包含的某个素数多于一次,它们不应再被考虑。

igood[i]=trueii*ji*jN/ii*jideg[i]deg[i]为奇数,那么我们要用加号,否则用减号。

程序实现:

int n;

bool good[MAXN];

int deg[MAXN], cnt[MAXN];

long long solve()

{

memset (good, 1, sizeof good);

memset (deg, 0, sizeof deg);

memset (cnt, 0, sizeof cnt);

long long ans_bad = 0;

for (int i=2; i<=n; ++i)

{

if (good[i])

{

if (deg[i] == 0) deg[i] = 1;

for (int j=1; i*j<=n; ++j)

{

if (j > 1 && deg[i] == 1)

if (j % i == 0)

good[i*j] = false;

else

++deg[i*j];

cnt[i*j] += (n / i) * (deg[i]%2==1 ? +1 : -1);

}

}

ans_bad += (cnt[i] - 1) * 1ll * (n - cnt[i] - 1);

}

return (n-1) * 1ll * (n-2) * (n-3) / 6 - ans_bad / 2;

}未完待续……

c语言容斥原理求素数,容斥定理相关题目讲解相关推荐

  1. 最简真分数c语言,HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)...

    描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...

  2. 《程序设计中的组合数学》——容斥定理

    在中学阶段的数学中,有诸如"一个班有7个语文满分,6个数学满分,5个英语满分--求满分的同学有多少个"的"多面手"问题,当时老师介绍的思路是画个图自己分配一下, ...

  3. 组合数学 —— 容斥定理

    [概述] 容斥原理是一种较常用的计数方法,其基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复. 容斥原理 ...

  4. HDU-4059 The Boss on Mars 容斥定理

    将与N不互质的数全部找出来,再应用容斥定理求得最后的结果.这题在求 a/b MOD c 的时候使用费马小定理等价于 a*b^c(-2) MOD c.用x/lnx 可以估计出大概有多少素数. 代码如下: ...

  5. hdu 1796 How many integers can you find 容斥定理

    一开始看 这里 这个文章博主写得很好. 当举容斥定理的所谓 奇数为负 偶数为正的时候. 我直接就认为是 a*b 了.实际上是lcm(a,b). 由于博文中的因子都是互素的(素数之间).所以lcm(a, ...

  6. [acmm week12]染色(容斥定理+组合数+逆元)

    1003 染色         Time Limit: 1sec    Memory Limit:256MB Description 今天离散数学课学了有关树的知识,god_v是个喜欢画画的人,所以他 ...

  7. HDU 6143 Killer Names【容斥定理】【排列组合】

    题目来戳呀 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...

  8. 二项式反演(广义容斥定理)学习笔记

    背景: 二项式反演又名广义容斥定理. 下次再看题解时要注意了. 解锁新姿势. 说白了就是之前会的姿势太少了. 正题: 说白了就是有这样两条恒等的式子: f n = ∑ i = 0 n ( − 1 ) ...

  9. poj1091跳蚤(容斥定理)

    题目: Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最后 ...

  10. UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理

    这个是参考了别人之后的代码,POJ上0MS过了.Orz......对于一个序列在提取了2,5之后,例如1,2,3,4,5,6,7,8,9,10,我们可以将其中的奇数和偶数分开来对待,对于偶数序列2,4 ...

最新文章

  1. SQL 与oracle数据同步之 链接服务器
  2. 变种 背包问题_动态规划入门——传说中的零一背包问题
  3. 二维傅里叶变换是怎么进行的?
  4. TabHost两种实现方式
  5. 使用AIR运行另外的程序。
  6. 工信部:支持符合条件的工业互联网企业上市
  7. linux安全策略查询代码,Linux多安全策略和动态安全策略框架模块代码分析报告(14)...
  8. 【前端应该知道的那些事儿】运动学基础
  9. html header设置语言,html5 header标签 html header css布局教程
  10. OpenGl读取导入3D模型并且添加鼠标移动旋转显示
  11. matlab 读取mdf文件路径,从 MDF 文件中读取数据
  12. 将android应用中产生arn的原因写到本地
  13. pnpm安装使用教程以及pnpm node版本管理以及EPERM operation not permitted symlink问题解决
  14. 腾讯企业邮箱免费申请 mail-tencent.com
  15. python金融风控评分卡模型
  16. 主题建模-corpora语料库-PCA进行降维
  17. mac在终端打开mysql_如何在Mac上打开终端
  18. lv双肩包尺寸对照表_最值得入手的10款LV双肩包包书包图片大全
  19. MATLAB的动态图,伪色彩图、矢量图、流线图,散点图折线图的绘制例子--流体力学;LBM
  20. mysql table crashed_快速解决MySQL:Table xxx is marked as crashed and should be repaired五个办法...

热门文章

  1. 安装微软的消息队列服务器,MSMQ消息队列的安装、启用
  2. 供应链拼图:拼合未来的全球经济
  3. 交换机的工作原理是什么,它有什么功能与作用?
  4. 《云计算技术与应用基础》课程标准
  5. python拼音四线格书写格式_Python 中拼音庫 PyPinyin 的用法
  6. linux备份mysql部分表数据,mysqldump导出表的部分数据库
  7. 艾司博讯:拼多多拼单人数不够怎么取消
  8. mysql命令(集合)
  9. Xshell6复制粘贴快捷设置
  10. 唯物辩证法-矛盾论(普遍性+特殊性+斗争性+同一性)