题目链接

\(Description\)

给定\(x,y\),求有多少个数列满足\(gcd(a_i)=x且\sum a_i=y\)。答案对\(10^9+7\)取模。

\(1≤x,y≤10^9\)


\(Solution\)

\(y\)如果不是\(x\)的倍数,答案为\(0\)

然后呢

令\(y/=x\),问题就变成了求有多少个数列满足\(gcd(a_i)=1且\sum ai=y'\)

如果没有\(gcd\)为\(1\)的限制?

隔板法可得\(ans=\sum_{i=0}^{y-1}C_{y-1}^i=2^{y-1}\)

令\(f(i)\)表示\(gcd(a_i)=1\)且和为\(i\)的方案数,\(g(i)\)表示和为\(i\)的方案数。

可得

\[g(i)=2^i-1,g(i)=\sum_{d|i}f(d)
\]

要求的是\(f(i)\),所以把\(f(i)\)的一项单独拿出来

\[f(i)=g(i)-\sum_{d|i,d\not = i}f(d)
\]

然后就可以从前往后递推了。

复杂度\(O(d(y/x)^2)\),其中\(d(x)\)为\(x\)的约数个数。

当然$$g(i)=\sum_{d|i}f(d)$$

就是一般的莫比乌斯反演的形式。

可以直接得出

\[f(i)=\sum_{d|i}\mu(d)g(\frac{i}{d})
\]

#include<complex>
#include<cstdio>
using namespace std;
const int mod=1e9+7;
const int N=1e5+7;
int x,y,tot;
int d[N];
int qread()
{
int x=0;
char ch=getchar();
while(ch<'0' || ch>'9')ch=getchar();
while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x;
}
int GetMu(int x)
{
if(x==1)return 1;
int t=0,sqr=sqrt(x);
for(int i=2;i<=sqr;i++)
if(x%i==0)
{
t++;x/=i;
if(x%i==0)return 0;
}
if(x>1)t++;
return t&1?-1:1;
}
int Fpow(long long b,int p)
{
long long res=1;
for(;p;p>>=1,b=b*b%mod)
if(p&1)res=res*b%mod;
return res;
}
int main()
{
scanf("%d%d",&x,&y);
if(y%x){printf("0\n");return 0;}
y/=x;
for(int i=1;i*i<=y;i++)
if(y%i==0)
{
d[++tot]=i;
if(i*i!=y)d[++tot]=y/i;
}
long long ans=0;
for(int i=1;i<=tot;i++)
ans+=GetMu(y/d[i])*Fpow(2,d[i]-1);
printf("%d\n",(ans%mod+mod)%mod);
return 0;
}

CF 900D Unusual Sequences的更多相关文章

  1. Codeforces 900D Unusual Sequences 容斥原理

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

  2. CodeForces 900D Unusual Sequences

    题目链接: https://codeforces.com/contest/900/problem/D 题意 假设有distinct 正整数序列{a1,a2,,,an},满足gcd(a1, a2, .. ...

  3. Codeforces 900D Unusual Sequences:记忆化搜索

    题目链接:http://codeforces.com/problemset/problem/900/D 题意: 给定x,y,问你有多少个数列a满足gcd(a[i]) = x 且 ∑(a[i]) = y ...

  4. 【CF900D】Unusual Sequences 容斥(莫比乌斯反演)

    [CF900D]Unusual Sequences 题意:定义正整数序列$a_1,a_2...a_n$是合法的,当且仅当$gcd(a_1,a_2...a_n)=x$且$a_1+a_2+...+a_n= ...

  5. CodeForces - 900D: Unusual Sequences (容斥&莫比乌斯&组合数学)

    Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers such ...

  6. CF 405C Unusual Product(想法题)

    题目链接: 传送门 Domino Effect time limit per test:1 second     memory limit per test:256 megabytes Descrip ...

  7. CF 990C. Bracket Sequences Concatenation Problem【栈/括号匹配】

    [链接]:CF [题意]: 给出n个字符串,保证只包含'('和')',求从中取2个字符串链接后形成正确的括号序列的方案数(每个串都可以重复使用)(像'()()'和'(())'这样的都是合法的,像')( ...

  8. CF 256D. Good Sequences(DP)

    题目链接 主要是标记前面素数的最大的DP值,要认真一些.没想到居然写了一个很难发现的错误. #include <cstdio> #include <cstring> #incl ...

  9. cf B. Making Sequences is Fun

    http://codeforces.com/contest/373/problem/B 用二分枚举长度就可以. #include <cstdio> #include <cstring ...

随机推荐

  1. 更改collation批处理

    DECLARE @zcreate_index_sql NVARCHAR(max); SET @zcreate_index_sql = N''; SELECT @zcreate_index_sql = ...

  2. 整理:WPF中应用附加事件制作可以绑定命令的其他事件

    原文:整理:WPF中应用附加事件制作可以绑定命令的其他事件 目的:应用附加事件的方式定义可以绑定的事件,如MouseLeftButton.MouseDouble等等 一.定义属于Control的附加事 ...

  3. laravel 5.5 仓库模式 文件之间接口与实现操作

    仓库模式 最直接的意思就是: Eloquent数据(数据库)查询  方便快捷,简单明了.自己怎么写的,就怎么去调用,完全ok~ 本质意思: 仓库就像是业务内部的数据对象集合,负责协调业务和数据映射层之 ...

  4. Eclipse集成Git做团队开发:分支管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  5. Mybatis映射器接口代理对象的方式 运行过程

    查询一张表的所有数据. 环境: 使用工具IntelliJ IDEA 2018.2版本. 创建Maven工程不用骨架 1.pom.xml <?xml version="1.0" ...

  6. 版本控制器:Git-的使用

    版本控制器:Git # 达到多人协同开发的目的 安装 """ 1.下载对应版本:https://git-scm.com/download 2.安装git:在选取安装路径的 ...

  7. Fedora搭dokuwiki的步骤 以apache2.4为例

    官网下载dokuwiki的包,解压到/var/www/html/下 修改dokuwiki的权限.拥有者/组 为apache 安装PHP 在/etc/httpd/conf 创建dokuwiki的配置文件 ...

  8. Java 流程控制语句 之 顺序结构

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说,程序的流程对运行结果 有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过控制语句的执行顺序来实 ...

  9. docker中安装及使用mysql

    打算构造一个环境较全的linux环境,所以在本地弄了个docker.然后pull了一个centos的镜像,并打算在此镜像的基本上,构建适合自己的镜像.但在使用时,发现了各种问题,还是费了一些功夫.原因 ...

  10. SAP技术 - How to create a CDS redirect view for a given database table

    Scenario Suppose we have a database table A, and then we create a CDS redirect view B for it, then e ...