巧解容斥

基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题 阅读详情

hdu 6053
题意:给定一个a序列,让求有多少种b序列满足,b序列的对应值小于等于a序列的值,且b序列的任意区间的数的gcd>=2;
思路:任意区间的数的gcd>=2则说明,b序列任意两个数不互素,这就可以枚举约数,假如约数为k,则a序列的每个数ai的贡献为ai/k向下取整个值,全部乘起来就是约数为k的b序列种类,每种约数之和就是ans,但是会有重复的,后面容斥一下就好了。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const int maxn=1e6+10;
const LL mod=1e9+7;
LL x[maxn],dis[maxn],dp[maxn];
LL quickpow(LL a,LL k)
{
    if(a==1||k==0) return 1;
    LL res=1;
    while(k)
    {
        if(k&1)
            res=(res*a)%mod;
        a=(a*a)%mod;
        k>>=1;
    }
    return res;
}
LL ans[maxn];
int main()
{
    int ncase,Z=0;
    scanf("%d",&ncase);
    while(ncase--)
    {
        memset(dis,0,sizeof(dis));
        memset(dp,0,sizeof(dp));
        memset(ans,0,sizeof(ans));
        LL n,Min=100010;
        scanf("%lld",&n);
        for(int i=0; i<n; i++)
        {
            scanf("%lld",&x[i]);
            Min=min(Min,x[i]);
            dis[x[i]]++;//数列值域化
            /*
            后面要求小于等于某个数,是k的倍数的有过少个,如果每次都跑一边n
            的话,时间复杂度会很高,但是我们发现1~k-1除k向下取整都是1而
            k~2*k-1除k向下取整都是2,所以他们可以看成同一个值,用快速幂求解
            */
        }
        for(int i=1; i<=200000; i++)//统计前缀和
            dis[i]+=dis[i-1];
        for(int k=2; k<=Min; k++)//枚举约数
        {
            LL sum=1;
            for(int j=k; j<=100000; j+=k)//看约数为k的方案有多少种
            {
                sum=(sum*(LL)quickpow((LL)j/k,dis[j+k-1]-dis[j-1]))%mod;
            }
            ans[k]=sum;
        }
        for(int i=100000;i>=2;i--)//手动容斥
        {
            dp[i]=ans[i];
            for(int j=i+i;j<=100000;j+=i)
                dp[i]=((dp[i]-dp[j])%mod+mod)%mod;
        }
      /*
        dp[i]代表gcd为i的有多少种,不包括重复的,这就是从后往前容斥的好处,不需要
        加两个倍数个倍数,因为他们是不会重复的,比如2和3有6这个公倍数,如果减去了
        2和3倍数的数量则6的倍数的数量就减去了2次要加上6的倍数的数量,而从后往前找
        到2时,找到6,6代表的只是自己的值,并不会包含自己倍数的值,这样就不用加了
        */
        LL sum=0;
        for(int i=2;i<=100000;i++)//统计结果
            sum+=dp[i],sum%=mod;
        printf("Case #%d: %lld\n",++Z,sum);
    }
}
数量关系3_容斥、溶液、十字交叉 方法三:十字交叉法,倒出的部分+剩余的部分=整体,溶液相等的盐酸混合后浓度正好在中间,所以浓度为17.5%,倒出的那部分浓度为15%,剩余的那部分为假设浓度X,量之比为3:2(倒出600,剩余400,二者是3:2)。会俄语的一半会法语,则2和4相等,三种语言都会的50人,则4和2都为50人,只会两种语言的有100人,所以2区域+5区域=100人,5为50人,会英语的一半会法语,所以4+5=1+2,2、4、5均为50人,所以1也为50人,只会一种语言的150,所以7为100,法语相加为200人。 阅读详情

相关推荐

深入浅出一文搞懂Raft协议

前言 在分布式的世界里,要说最核心最复杂的功能,一致性的实现无出其右,之前的paxos算法堪称经典,被认为是同类算法中效果最好的,基本上成为分布式一致性的代名词,但是paxos算法也是出了名的难理解,而且相当不好实现。本人也花了很多时间、看了很多材料也没有真正理解。所以基于paxos的思想进行的一致性算法的简化和实现就成为了现实的需求,在此背景下,本文的主角Raft就出现了。 Raft算法的头号目标就是容易理解(UnderStandable),这从论文中就可以看出来。当然,R...

microGP的专栏 6485

容斥原理(转载http://www.cppblog.com/vici/archive/2011/09/05/155103.html)

这篇文章发表于http://e-maxx.ru/algo/inclusion_exclusion_principle,原文是俄语的。由于文章确实很实用,而且鉴于国内俄文资料翻译的匮乏,我下决心将其翻译之。由于俄语对我来说如同乱码,而用Google直接翻译中文的话又变得面目全非,所以只能先用Google翻译成英语,再反复读,慢慢理解英语的意思,实在是弄得我头昏脑胀。因此在理解文章意思然后翻译成中文的

duanxian0621的专栏 3364

网络工程师的Python入门实战:手把手教你写交换机配置备份脚本

本文详细介绍了如何利用Python为网络工程师开发一个高效的交换机配置备份脚本,涵盖环境搭建、设备连接方案、智能设备发现、多因素认证、异常处理、配置差异对比等关键步骤。通过实战案例展示如何将备份时间从4小时缩短至15分钟,显著提升运维效率,特别适用于华为交换机等设备的配置导出与备份需求。

weixin_30291791的博客 302

容斥原理

容斥原理主要有三种题型:小学生容斥,合法的方案数,...等于k的方案数。大体思路是先利用各种稀奇古怪的方法求出包含不合法或者重复计算了的,但是比较好求的东西,然后套以下三种方法:小学生容斥就是统计一些东西,再减去重复统计的。合法的方案数就是ans1-ans2+ans3-ans4……等于k的方案数就是  for (int i=n;i>k;i--)     for (int j=1;j

heheda_is_an_OIer的博客 930

用workbuddy自定义Skill:手把手搭建AI炒股分析助手

AI Agent正成为个人投资研究的重要工具,而Skill作为行为规范,能让AI输出保持稳定与专业。在AI Agent应用中,很多人分不清Skill与Agent的区别:Agent负责目标拆解与执行,Skill则固化分析流程与输出模板。借助本地工作台workbuddy,用户可自定义Skill,实现从市场环境检查到财务排雷的五段式分析。通过调低温度参数、设定数据验证规则,该方案能有效避免大模型凭空编造数据,帮助个人投资者快速完成基本面体检、资金面观察与风险清单生成。本文基于一套可直接套用的配置与一个月实测,展示

weixin_29038537的博客 504

xenomai内核解析--嵌入式实时linux概述

Linux系统作为一个GPOS(通用操作系统)发展至今已经非常成熟可靠了,并且由于遵循GPL协议,开放所有系统源代码,非常易于裁剪。更重要的是,与其他开源的GPOS或RTOS相比,Linux系统支持多种处理器、开发板,提供多种软件开发工具,同时Linux系统对网络和图形界面的支持非常出色。显然,选择Linux操作系统在产品的开发周期和成本控制方面都有巨大优势。 虽然Linux系统功能强大、实用性强...

wsg1100 3699

容斥原理 数论

文章目录原理证明例题 原理 S1、S2 、S3 分别代表下图三个圆1、2、3的面积 如果我们想求下面图形构成的面积,该怎么求呢,很简单 S = S1 ∪ S2 ∪ S3= S1 + S2 + S3 -S1 ∩ S2 - S1 ∩ S3 - S2 ∩ S3 +S1 ∩ S2 ∩ S3 拓展一下,如果是4个圆的面积应该是 S =S1 ∪ S2 ∪ S3 ∪ S 4 = S1 + S2 + S3 + S4 -S1 ∩ S2 - S1 ∩ S3 - S1 ∩ S4 - S2 ∩ S3 - S2 ∩ S4 - S3

wmy0217_的博客 1962

Stable Diffusion 模型分享:Beautiful Realistic Asians(美丽真实的亚洲人)

Beautiful Realistic Asians(BRA)模型是由作者自己训练而成的一个独立模型,它是一个真实模型,并且是一个针对亚洲人训练的模型,可以生成非常漂亮的亚洲小姐姐。条目内容类型大模型基础模型SD 1.5来源CIVITAI作者文件名称文件大小1.99GB。

水滴的博客 2156

容斥基础

容斥原理虽然挺简单但是还是需要注意一下,容斥时两两数间没有公共因子的. 如求解一个数中能被5,6,8三个数整除的个数. 如果单纯的而没有进行约因数结果会是417. #include using namespace std; int main() { int n,m,i,j,k; while(cin>>n) { k=n/5+n/6

Grit_ICPC的博客 450

Lumerical 教程,包含作者个人理解及相关设计案例 (目前共计184篇,持续更新中)

4138。

u011699626的博客 1606

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 290

【容斥原理学习】

容斥原理学习

追梦赤子心 1576

自动驾驶算法-滤波器系列(三)——不同运动模型(CV、CA、CTRV、CTRA)的建模和推导

CV & CA & CTRV & CTRA1. CV模型2. CA模型3. CTRV模型4. CTRA模型 1. CV模型 2. CA模型 3. CTRV模型 4. CTRA模型

weixin_41480034的博客 2万+

容斥的原理及广义应用

容斥原理想起容斥原理,大家都不陌生。 相信很多地方都会举这样类似一个最简单的例子让大家理解容斥: 现在赛场上有n个人,都参加过WC、CTSC和APIO。 拿过至少一个比赛的金牌的有多少人? 我们可以简单计算拿过WC金牌的人数+拿过CTSC的金牌的人数+拿过APIO的金牌的人数。 但是这样会记重,比如jasonvictoryan,他既拿过WC的金牌又拿过APIO的金牌,又比如czllgzmz

不来也不去的一只失忆蝴蝶 9648

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

容斥dp,二项式反演

浅谈容斥dp。

wanglianda2007的博客 518

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

容斥原理,容斥系数

容斥原理,容斥系数 众所周知,容斥原理是计数问题中最鸡贼的东西.基本上很多计数问题都要用到容斥,但是有的时候你明明知道要容斥就是不知道怎么容斥.所以特此写在这里总结一下. 1.简单傻逼的容斥原理。 一般来说,这种容斥原理一般有n个性质,满足第\(i\)个性质的元素集合为\(A_i\),还有一个全集\(U\)。 现在我们需要统计\(ans=|U \bigcap \overline A_1 \bigc...

weixin_30823001的博客 503

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

容斥 dp

容斥系数一般是 (−1)∣S∣(-1)^{|S|}(−1)∣S∣。 初学容斥原理时都做过这样的一道题。有一张 n×mn \times mn×m 的棋盘,在上面染色,要求任意一行、任意一列的颜色都不完全相同。这是一个模型 全部 −-− 至少一个 +++ 至少两个 $- \cdots = \ $一个也没有。 所以我们枚举一下有多少行颜色一定相同,有多少列颜色一定相同。可以发现如果只有行或只有列,那么每行(每列)的颜色不一定相同,而同时有行和列就必须是同一颜色。那么用行数 +++ 列数套上容斥系数就行了。 其实在

ylxmf2005's Blog 591

容斥、染色类计数问题

染色相关 染色问题是一类NPC问题。 它的一般形式是给定一个无向联通图G&lt;n,m&gt;G_{&lt;n,m&gt;}G<n,m>​,要求用kkk种颜色对其染色。使得每一条边所连的两个端点不同色。 这一类问题通常需要很高的时间复杂度。但在特殊的图中,这一类问题能得到很优秀的解法。 例1 jzoj6079 Problem 给定无向联通图G&l...

Algor_pro_king_John的博客 815

容斥 反演 学习笔记

目录 容斥 反演 学习笔记 最基本的容斥 更一般的容斥 二项式反演 斯特林反演 莫比乌斯反演 容斥 反演 学习笔记 Tags: 数学,数论 参考: https://blog.youkuaiyun.com/werkeytom_...

weixin_30824479的博客 142

【筛法+容斥】HDU - 6053 - TrickGCD

题目链接<http://acm.hdu.edu.cn/showproblem.php?pid=6053> 题意: 有一个长度为N的数组a,问数组b有多少种情况,满足 1<=N,a[i]<=1e5 题解: 第二个条件其实就是,如果所有数字的gcd都大于等于2,那部分的也肯定大于等于2。 假设,则。设为的方案数,则。这样我们就可以枚举来进行容斥的运算,而且我们...

Eliot的博客 232

容斥算法精解

翻译:vici@cust 对容斥原理的描述 容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。 描述        容斥原理可以描述如下:          要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合

K键盘里的青春K 871

【数论】容斥问题教程+符号含义+公式(c++)

比如我们平常考试,我们会统计有几个语文及格,有几个数学及格,比如5个语文及格,2个数学及格,当然了,也会有大学霸两科都及格,比如1个人语文数学都及格,那我们班上一共有几个人呢?这张图片中,有两个集合,一个是语文及格,一个是数学及格,而∪这个符号,表示的是这张图中被红线画到的地方,注意,这里图中的这样两个集合被画到的地方,叫做并集,而∪个符号,叫做并。|A|+|B|+|C|-|A∩B|-|B∩C|-|C∩A|这部分,和上一条公式一样,问题是为什么要加上|A∩B∩C|?再来考考你,|A∪B∪C|是什么意思?

ptyz306的博客 1046

容斥系数

关于容斥系数: 8,9考试,建设城市: 考试时推+写了一个小时半,因为容斥系数卡了半天,一直在想之前做过的相似的集合计数的复杂系数。但最后不是,通过DP验证发现是最简单的正负1系数。 在一般容斥中都是1,-1,1,-1。保证每个点都只有1层。可用组合数推出。 而《集合计数》(见CQzhangyu :https://www.cnblogs.com/CQzhangyu/p/7124...

dianzhi3705的博客 596

容斥 C. Strange Function改编题

赛时对这题容斥没有找到切入点。这个容斥处理极具有思维性,还是需要多做思维题!参考:Codeforces] number theory (R1600) Part.11 - 知乎 (zhihu.com)

田乐蒙的博客 343

容斥dp的数学基础

容斥dp的数学基础。

wanglianda2007的博客 541
上一篇: lucas定理
下一篇: 莫比乌斯反演
acmer_zp
博客等级 码龄11年 18粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值