POJ 1091 跳蚤(数论+容斥)
2016-03-01 16:35
246 查看
Description
有n个不超过m的正整数a1,…,an,问有多少种满足条件的a序列使得gcd(a1,…,an)=1
Input
两个整数n和m(n<=15,m<=10^8)
Output
满足条件的a序列个数
Sample Input
2 4
Sample Output
12
Solution
总方案数为m^n,不满足条件的方案是当这n个数都含有m的某一个因子,对于某一个因子p,不满足条件的方案数为(m/p)^n,由容斥原理知
Code
有n个不超过m的正整数a1,…,an,问有多少种满足条件的a序列使得gcd(a1,…,an)=1
Input
两个整数n和m(n<=15,m<=10^8)
Output
满足条件的a序列个数
Sample Input
2 4
Sample Output
12
Solution
总方案数为m^n,不满足条件的方案是当这n个数都含有m的某一个因子,对于某一个因子p,不满足条件的方案数为(m/p)^n,由容斥原理知
Code
#include<cstdio> #include<iostream> using namespace std; typedef long long ll; ll n,m,ans; ll pow(ll a,ll b) { ll ans=1ll; while(b) { if(b&1)ans=ans*a; a=a*a; b>>=1; } return ans; } int main() { while(~scanf("%lld%lld",&n,&m)) { ans=pow(m,n); ll mm=m; for(ll i=2;i*i<=mm;i++) if(m%i==0) { ll temp=pow(i,n); ans=ans/temp*(temp-1); while(m%i==0)m/=i; } if(m>1)ans=ans/pow(m,n)*(pow(m,n)-1); printf("%lld\n",ans); } return 0; }
相关文章推荐
- ubuntu 固定ip
- html入门
- Hibernate核心接口学习
- c语言的结构体详解
- Java中的Collection和Map(四)--Set体系
- PHP 调用Oracle存储过程
- 【云计算】Docker云平台—Docker基础
- 动态显示和隐藏状态栏
- Android产生圆角图片Bitmap
- 详解Wondows下Node.js使用MongoDB的环境配置
- 英国雕塑家获特殊颜料专利
- Linux环境变量的设置
- 事件分发机制
- 如何在 visio 2013 中插入数学公式
- Unix Study之--P5光盘安装AIX6.1全实录
- Win内核原理与实现学习笔记1-windows内核版本列表
- Maximum Likelihood Method最大似然法
- BestCoder Round #65 hdu5591(尼姆博弈)
- Mac下Sublime Text 总是以新窗口打开文件的解决办法
- 解决IIS配置HTTPS证书完成证书后刷新后证书消失问题