容斥原理求1到n与k互质个数
来源:互联网 发布:小米机顶盒下载软件 编辑:程序博客网 时间:2024/05/23 01:19
参考博客:传送门
题目:HDU 4135
此处的k<=1e9、
#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>#include<vector>using namespace std;typedef long long ll;const int qq = 10005;int num;int prime[qq];void Analyze(ll x){for(ll i=2; i*i<=x; ++i)if(x%i==0){prime[num++] = i;while(x%i==0)x/=i;}if(x>1)prime[num++] = x;}ll slove(ll x){ll ans = 0;for(ll i = 1; i<(1<<num); ++i){ll t = 1;int cnt = 0;for(int j=0; j<num; ++j)if(i&(1<<j))cnt++,t*=prime[j];if(cnt&1)ans+=x/t;elseans-=x/t;}return ans;}
之前还在想num的大小,前10个最小的质数的乘积是小于3e9, 所以完全不用担心num的大小
之前还想为什么i*i > 1e9就出循环, 其实想想算数基本定理, 如果x已经循环到i*i>1e9了, 说明此时的x就是个质数(x的原始大小最大只有1e9)
反证法:假设x是一个和数,因为x<=1e9的, 那么一个和数肯定能分解为一个小的质数乘一个大的质数,但是此时显然在i后面找不到这么一对质数是的乘积等于x、
因为i*i本身就>1e9, 后面的数只会比i大、 所以此时x就是个质数
0 0
- 容斥原理求1到n与k互质个数
- 【容斥原理】求1~n有多少个数与k互质
- 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释&模板)
- 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释&模板)
- 容斥原理的应用---求1--r中与n互素数的个数
- HDU 4135:Co-prime 容斥原理求(1,m)中与n互质的数的个数
- hdu 1695 hdu 4135 容斥原理求1-n 区间内与r互质的个数
- 求1~n与x互质的数的个数(6个题、容斥原理)
- hdu 4135 容斥原理 求(1,m)区间与n互质的数的个数.
- 求1~n中与m互质的数的个数(m>n) 附hdu1695题解(欧拉函数+容斥原理)
- 求a~b内与n互素的数的个数 容斥原理
- 求指定区间内与n互素的数的个数 容斥原理
- 容斥原理应用(求1~r中有多少个数与n互素)
- 容斥原理应用(求1~r中有多少个数与n互素)
- 容斥原理求1~r中有多少个数与n互素
- poj 2773 容斥原理+二分(求与n的第k互质数)
- HDU4135 (求a~b内与n互素的数的个数) 容斥原理
- 经典问题:求区间内与n互素的数的个数(容斥原理)(4135)
- 死锁
- [基本实验] %00截断攻击的探索
- 文章标题
- 文本格式设置
- NW-修改bug第一步
- 容斥原理求1到n与k互质个数
- 指针数组堆上分配内存(动态分配内存)
- ProcessBuilder的简单使用
- 关于初次使用IEDA 2016.2.4 新建javaSE工程的问题
- 多个acitivity之间层层传递数据的处理
- 排序算法--总结
- 内存四驱模型
- Java知识点杂烩
- 进程间通信之共享内存