[HDU 4135] Co-prime · 容斥原理
来源:互联网 发布:java redis集群 编辑:程序博客网 时间:2024/05/20 14:23
题意为求[a,b]中与n互质的数的个数。
可以将问题转化为,求出[1,b]和[1,a-1]中与n互质的数的个数然后用前者减去后者,就是答案。
然后求[1,a]区间中与n互质的数的个数实际上又可以转为求与n不互质的数的个数,在n小的时候可以用欧拉函数求,但是像这题n比较大的时候就适合用容斥原理。
容斥原理思想请自行百度。。。
orz:http://www.cnblogs.com/jiangjing/archive/2013/06/03/3115470.html
#include <stdio.h>#include <algorithm>#include <string.h>#include <vector>using namespace std;#define pb push_backvector<int> p;long long a,b,n;long long ans,T;void init(){p.clear();long x=n;for (int i=2;i*i<x;i++)//将n质因数分解 if (x%i==0){p.pb(i);for (;x%i==0;x/=i);}if (x>1) p.pb(x);}long long calc(long long x){long long sum=0,cnt,t=1<<(p.size()),val;for (int i=1;i<t;i++){//用二进制来表示某个因子有没有被选过 val=1;cnt=0;//val表示选取的质因子的乘积 cnt表示选了多少个质因子 for (int j=0;j<p.size();j++)if (i & (1<<j))cnt++,val*=p[j];if (cnt&1) sum+=x/val;//容斥原理 奇加偶减 else sum-=x/val;}return x-sum;}int main(){scanf("%I64d",&T);for (int i=1;i<=T;i++){scanf("%I64d%I64d%I64d",&a,&b,&n);init();ans=calc(b)-calc(a-1);printf("Case #%d: %I64d\n",i,ans);}return 0;}
0 0
- [容斥原理] hdu 4135 Co-prime
- 【HDU】4135 Co-prime 容斥原理
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime 容斥原理
- hdu 4135 Co-prime【容斥原理】
- hdu 4135 Co-prime (容斥原理)
- 【容斥原理】HDU 4135 Co-prime
- HDU 4135 Co-prime (容斥原理)
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime 容斥原理
- hdu 4135 Co-prime 容斥原理
- HDU 4135 Co-prime(容斥原理)
- HDU 4135 Co-prime(容斥原理)
- HDU 4135 Co-prime 容斥原理
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime(容斥原理)
- [HDU 4135]Co-prime:容斥原理
- 容斥原理:HDU-4135Co-prime
- C++中运算符的优先级(供查阅)
- Maven、gradle、Ant、Eclipse IDE之间的关系
- 求连续子数组的最大和
- TortoiseSVN中分支和合并
- ORA-00845: MEMORY_TARGET not supported on this system
- [HDU 4135] Co-prime · 容斥原理
- iOS7之定制View Controller切换效果
- 动态规划——砝码称重
- 5-19 求链式线性表的倒数第K项 (20分)
- ActiveMQ入门实例
- jQuery中的$(window).load()与$(document).ready()
- java之静态初始化块
- 网站广告收入反正要发动群众的力量,来创造利润--小黄人软件
- 第一个裸机程序---点亮led小灯