好题。

首先发现$p$是互质的数。

然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数。

然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数

可以考虑围绕$S$进行动态规划。

然后发现有时候许多情况是多余的。因为一整个$S$只能由一些相同的$p$组合而成。

所以这些部分可以用组合数计算,剩下的部分可以用背包处理出来。

需要滚动数组,而且需要前缀和转移。

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define maxn 2000005
#define md 1000000007
int pri[10],f[2][maxn<<3],s,q,top=0;
int Dp()
{
int now=0,pre=1;
memset(f[now],0,sizeof f[now]);
f[now][0]=1;
F(i,1,top)
{
now^=1;pre^=1;memset(f[now],0,sizeof f[now]);
int up=s/pri[i]-1;
F(l,0,pri[i]-1)
{
int presum=0;
for (int j=0;j<=(s*top-l)/pri[i];j++)
{
presum+=f[pre][j*pri[i]+l];presum%=md;
if (j>=up+1) presum-=f[pre][(j-up-1)*pri[i]+l];
f[now][j*pri[i]+l]=presum;
}
}
}
return now;
} int ksm(int a,int b)
{
int ret=1;
for (;b;b>>=1,a=a*a%md) if (b&1) ret=ret*a%md;
return ret;
} int C(int n,int m)
{
n=n+1; m=m-1;
n=n+m-1;
int ret=1;
for(int i=n;i>=n-m+1;i--)
ret=ret*(i%md)%md;
F(i,1,m) ret=ret*ksm(i,md-2)%md;
return ret;
} signed main()
{
scanf("%lld%lld",&s,&q);int x=s;
F(i,2,sqrt(s))
{
if (s%i==0) s/=i,pri[++top]=i;
if (s%i==0)
{
while(q--) printf("0\n");
return 0;
}
}
if (s>1) pri[++top]=s; s=x;
int now=Dp();
while(q--)
{
int ret=0;
int n;scanf("%lld",&n);
F(i,1,top) n-=pri[i];
if (n<0) {printf("0\n"); continue;}
int m=n/s,k=n-m*s;
F(i,0,min(top,m))
ret=(ret+f[now][i*s+k]*C(top+m-i-top,top%md)%md)%md;
printf("%lld\n",(ret+md)%md);
}
}

  

最新文章

  1. ACM交流赛感悟
  2. NSArray转json字符串
  3. Mac下同时安装多个版本的JDK
  4. java 代码的细节优化
  5. kettle转换提高性能拆分转换步骤_20161201
  6. Java 线程池的介绍以及工作原理
  7. pager 命令
  8. Java Calendar类简单用法
  9. Eclipse内存溢出问题
  10. H3C S5000和H3C S5500,俺来罗
  11. webstrom管理git
  12. jquery删除表格行
  13. Beta的计划和人员的变动
  14. java设计模式在公众号的应用——我是一个快乐的单例
  15. 给定n,求1/x + 1/y = 1/n (x&lt;=y)的解数~hdu-1299~(分解素因子详解)
  16. Java 200+ 面试题补充② Netty 模块
  17. HDU 1162 Eddy&#39;s picture (最小生成树)(java版)
  18. Linux之man命令详解及中文汉化
  19. day 24 socket 黏包
  20. 查看项目中的laravel的版本

热门文章

  1. 多线程中使用HttpContext.Current为null的解决办法
  2. JavaScript 交换两个变量的值
  3. v4l2解析
  4. 爬虫学习(八)——带cookie的网页进行爬取
  5. 模态框获取内容jQuery
  6. Apache 查找httpd.conf文件
  7. 日期增加天数--JS Date
  8. PHP 对象基础知识
  9. 绘制三角形:imageline()
  10. kubernetes中使用ServiceAccount创建kubectl config 文件