FZU 1851 组合数
给你两个数n和m,然后让你求组合数C(n,m)中的质因子的个数。
这里用到的一个定理:判断阶乘n!中的质因子 i 的个数的方法---f(n!)=n/i+n/i^2+n/i^3+.....n/i^m (i为一个质因子,m是使n/i^m=0的最小值);
又已知C(n,m)=n!/ ( m!·(n-m)! ) ; 所以需要n!中所有的质因子的个数,然后再减去m! 和 (n-m)! 这些质因子的个数,得到的结果就是该组合数质因子的个数。
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath> 6 #include <cstdlib> 7 #include <cctype> 8 #include <queue> 9 #include <stack> 10 #include <map> 11 #include <vector> 12 #include <set> 13 #include <utility> 14 #define ll long long 15 #define inf 0x3f3f3f3f 16 using namespace std; 17 18 const int N=1e6+7; 19 bool book[N]; 20 vector<int> prime; 21 void get_prime() //筛法预处理素数表 22 { 23 fill(book,book+N,false); 24 for(int i=2;i<N;i++) 25 { 26 if(!book[i]) 27 { 28 prime.push_back(i); 29 for(int j=i+i;j<N;j+=i) 30 book[j]=true; 31 } 32 } 33 } 34 int main() 35 { 36 //freopen("input.txt","r",stdin); 37 get_prime(); 38 int n,m; 39 while(scanf("%d%d",&n,&m)&&n&&m) 40 { 41 int res=0; 42 int len=prime.size(); 43 for(int i=0;i<len&&prime[i]<=n;i++) 44 { //分别计算n!、m!、(n-m)! 中含有质因子prime[i]的个数,再把n!的个数减去m!和(n-m)!的个数 45 int tn=n,tm=m,tt=n-m,cnt=0; 46 while(tn) 47 { 48 cnt+=tn/prime[i]; 49 tn/=prime[i]; 50 } 51 while(tm) 52 { 53 cnt-=tm/prime[i]; 54 tm/=prime[i]; 55 } 56 while(tt) 57 { 58 cnt-=tt/prime[i]; 59 tt/=prime[i]; 60 } 61 if(cnt) res++; 62 } 63 printf("%d\n",res); 64 } 65 return 0; 66 }
转载于:https://www.cnblogs.com/geek1116/p/5694855.html
FZU 1851 组合数相关推荐
- FZU - 2020 计算大组合数取模
题意: 给出m,n. 计算C(n,m)%p,C(n,m)很大,p是素数 卢卡斯.不过不可以预处理,mod太大了 #include <iostream>//Lucas模板 #include ...
- FZU - 2301 H - Chosen by god (组合数学)
原题地址:http://acm.fzu.edu.cn/problem.php?pid=2301 题意:有n次攻击回合,每个回合的攻击有一点伤害,但是可能攻击到敌方无限血的英雄,也可能攻击到敌方的一个血 ...
- FZU Problem 2238 Daxia Wzc's problem(Lucas定理求组合数)
此文章可以使用目录功能哟↑(点击上方[+]) FZU Problem 2238 Daxia & Wzc's problem Accept: 0 Submit: 0 Time Limit ...
- Codeforces Beta Round #95 (Div. 2) 部分解题报告 (dp,组合数,)
做这样的比赛既考快速编码的能力,还有快速思维的能力.本人很弱,跌了rating..加油!!!.. 第一题上来就把题意理解错了..粗心啊..直接模拟着做就行:1:如果字符串全是大写字母就进行大小写转换: ...
- [CQOI2014]数三角形 组合数 + 容斥 + gcd
推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...
- fzu 2150 Fire Game 【身手BFS】
称号:fzu 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个格子扩散,问选择那两个点使得燃烧全部 ...
- 多重集表示合json数据_计数DP(划分数,多重集组合数)
划分数:把n个无区别的物品划分成不超过m组. dp[i][j]=j的i划分的总数. dp[i[j]=dp[i][j-i]+dp[i-1][j] 即:将j个物品分成i份,有两种情况:每份划分都大于等于1 ...
- 【ACM】杭电OJ 4704 Sum (隔板原理+组合数求和公式+费马小定理+快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=4704 1.隔板原理 1~N有N个元素,每个元素代表一个1.分成K个数,即在(N-1)个空挡里放置(K-1)块隔板 ...
- [Leetcode] Combinations 组合数
Combinations Given two integers n and k, return all possible ombinations of k numbers out of 1 ... n ...
最新文章
- +1.1向量 链表 数组
- leetcode算法题--扁平化嵌套列表迭代器
- mysql 1280_技术分享 | MySQL 一次奇怪的故障分析
- messagedigest 图片加密_MessageDigest 加密和解密2
- C#调试WebService
- macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了!
- win7计算机文件夹打开慢,win7开机很慢怎么办 win7电脑开机慢的优化教程
- 地表径流分布数据/水文站点分布/降雨量分布/辐射分布数据
- NSIS 安装VS2008运行时
- 安装markdownPad+awesomium
- Flash Cs4 安装之后打不开
- 分享一份适合写进简历的软件测试项目
- vs2017发布网站到IIS
- java 获取本年月份、本月/本周所有日期
- 第十七周助教工作总结——NWNU李泓毅
- doc创建php文件,PHP读取创建txt,doc,xls,pdf类型文件
- 笔记本显卡和台式显卡区别介绍
- 学校教务系统服务器配置,校园小程序: 基于强智教务系统的校园服务类小程序--多校版本(默认 山科)使用云开发...
- ubuntu 安装java运行环境,Ubuntu 安装java环境搭建
- Day5.牛客网剑指offer 67题之43-54题(java代码)