题意:给一个a数组,求b 数组的方案数,但是要求两者乘积相同。

分析:

不可能将它们乘起来,对于每个数质因数分解,得到每个质因子个数,遍历这些质因子,将某个质因子放到 对应的盒子里面,可以不放,方案数就是一个组合数,用插板法。

这里的素数板子挺好的,一方面可以用来判断,一方面存起来。

组合数,可以考虑用乘法逆元。

每个质因子个数hash一下。

#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9 + ;
#define N 50009
typedef long long ll; const int maxnn = +;
int C[maxnn][]; void init() {
memset(C, , sizeof(C));
C[][] = ;
C[][] = C[][] = ;
for(int i = ; i < maxnn; ++i)
{
C[i][] = C[i][i] = ;
for(int j = ; j < i; ++j)
{
C[i][j] = (C[i-][j-] + C[i-][j]) % MOD;
}
}
} bool vis[];
int primes[];
int num_prime;
int get_primes (int m) { //获取一定范围内的素数
memset(vis,,sizeof(vis));
for(int i=;i<m;i++) {
if(!vis[i])
primes[num_prime++]=i;
for(int j=;j<num_prime && i*primes[j]<m;j++) {
vis[i*primes[j]]=;
if(!(i%primes[j]))
break;
}
}
return num_prime;
} std::map<int, int> mp; void divide(int x) {
int temp = (int)sqrt(x*1.0);
for(int i=;i<num_prime;i++) {
if(primes[i]>temp) break;
while(x%primes[i]==) {
mp[primes[i]]++;
x /=primes[i];
}
}
if(x!=)
mp[x]++;
} int main(int argc, char const *argv[])
{
mp.clear();
init();
get_primes(N);
int n,x;
scanf("%d",&n);
for(int i=;i<n;i++) {
scanf("%d",&x);
divide(x);
} ll ans= ;
std::map<int, int> ::iterator p; for(p = mp.begin();p!=mp.end();p++) {
int k = p->second; ans = ans * C[k+n-][n-] % MOD;
} printf("%lld\n", ans); return ;
}

Codeforces 396A 数论,组合数学的更多相关文章

  1. Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field【数论/组合数学】

    B. Ralph And His Magic Field time limit per test 1 second memory limit per test 256 megabytes input ...

  2. Codeforces 223C Partial Sums 数论+组合数学

    题意非常easy,求不是那么好求的,k非常大 要操作非常多次,所以不可能直接来的.印象中解决操作比較多无非线段树 循环节 矩阵 组合数等等吧,这道题目 也就仅仅能多画画什么 的了 就以第一个案例为主吧 ...

  3. CodeForces 300C --数论

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

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

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

  5. Codeforces 264B 数论+DP

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

  6. Colorful Bricks CodeForces - 1081C ( 组合数学 或 DP )

    On his free time, Chouti likes doing some housework. He has got one new task, paint some bricks in t ...

  7. Codeforces 15E Triangles - 组合数学

    Last summer Peter was at his granny's in the country, when a wolf attacked sheep in the nearby fores ...

  8. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem F (Codeforces 831F) - 数论 - 暴力

    题目传送门 传送门I 传送门II 传送门III 题目大意 求一个满足$d\sum_{i = 1}^{n} \left \lceil \frac{a_i}{d} \right \rceil - \sum ...

  9. CodeForces 1202F(数论,整除分块)

    题目 CodeForces 1213G 做法 假设有\(P\)个完整的循环块,假设此时答案为\(K\)(实际答案可能有多种),即每块完整块长度为\(K\),则\(P=\left \lfloor \fr ...

随机推荐

  1. SpringFox

    简介     http://projects.spring.io/spring-framework null

  2. oracle 备份恢复篇(三)---rman spfile的丢失

    一,环境准备 1, 拥有全备 数据 2, 查看spfile文件位置 SQL> SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER ...

  3. 移动端刷新组件XtnScroll--Angular4实现

    刷新组件 - 主要是学习一下Angular4所有花了我一天时间,写了这个刷新组件. 以项目开发当中,特别是手机移动端开发的时候,经常要用到就是上拉加载下一面,下拉刷新获取最新数据的功能. 在网也有很多 ...

  4. Oracle 单实例数据库安装和real application clusters数据库安装的区别

    在想了解Oracle单实例数据可和RAC数据库前,请确保你已经知道了数据库和实例的关系,如果不了解,请参考Oracle 数据库实例和数据库. 单实例数据库模式 单实例模式下,一个数据库只能通过一个实例 ...

  5. maven pom.xml指定jdk

    <plugins> <!-- 指定jdk --> <plugin> <groupId>org.apache.maven.plugins</grou ...

  6. 九度oj题目1511:从尾到头打印链表

    题目1511:从尾到头打印链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:6010 解决:1805 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包 ...

  7. CF 305C ——Ivan and Powers of Two——————【数学】

    Ivan and Powers of Two time limit per test 1 second memory limit per test 256 megabytes input standa ...

  8. js 添加HTML属性的方法

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. nginx安装及优化

    1.pcre及nginx安装包下载 wget http://www.pcre.org/   pcre用yum安装即可 http://nginx.org/en/download.html 2.安装 -安 ...

  10. JS数组遍历方法

    常用数组遍历方法: 1.原始for循环 var a = [1,2,3]; for(var i=0;i<a.length;i++){ console.log(a[i]); //结果依次为1,2,3 ...