BZOJ2986 Non-Squarefree Numbers
来源:互联网 发布:网络推广师学费多少 编辑:程序博客网 时间:2024/05/29 19:05
我们可以考虑二分答案,那么考虑如何求n以内的non-squarefree numbers有多少个
考虑容斥,个数为n减一定是1个质数的平方的倍数的个数加一定是两个质数的平方的倍数的个数减……
那么就是sigma n/(i*i)*mu[i]
mu为莫比乌斯函数
这样的话i枚举到根号n就行了
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<algorithm>#include<iomanip>#include<cmath>#include<vector>#include<queue>#include<stack>#include<bitset>#include<set>#include<map>using namespace std;#define MAXN 1000010#define MAXM 1010#define INF 1000000000#define eps 1e-8#define MOD 1000000007#define ll long longbool np[MAXN];int p[MAXN],tot;int u[MAXN];ll ans,n;void su(){int i,j;u[1]=1;for(i=2;i<MAXN;i++){if(!np[i]){p[++tot]=i;u[i]=-1;}for(j=1;p[j]*i<MAXN&&j<=tot;j++){np[i*p[j]]=1;if(!(i%p[j])){break;}u[i*p[j]]=-u[i];}}}ll cal(ll x){ll i;ll re=x;for(i=1;i*i<=x;i++){re-=x/(i*i)*u[i];}return re;}int main(){su();scanf("%lld",&n);ll l=0,r=210000000000ll;while(l<=r){ll mid=l+r>>1;if(cal(mid)>=n){ans=mid;r=mid-1;}else{l=mid+1;}}printf("%lld\n",ans);return 0;}/**/
0 0
- BZOJ2986 Non-Squarefree Numbers
- [BZOJ2986]Non-Squarefree Numbers(二分+容斥原理)
- bzoj2986 Non-Squarefree Numbers (莫比乌斯函数)
- bzoj 2986: Non-Squarefree Numbers
- bzoj 2986 Non-Squarefree Numbers
- 【BZOJ】【P2986】【Non-Squarefree Numbers】【题解】【数论】
- bzoj 2986: Non-Squarefree Numbers (容斥原理)
- bzoj2986
- [莫比乌斯函数] BZOJ 2986 Non-Squarefree Numbers & BZOJ 2440 [中山市选2011]完全平方数
- Non--Abundant numbers
- Non-random numbers
- non-random numbers
- Squarefree number
- SPOJ 16637. Non-Square Free Numbers
- PE 113 Non-bouncy numbers (dp)
- hdu 3826 Squarefree number
- HDU 3826 Squarefree number
- Squarefree number + 数论
- fetch与lazy
- VS2013 密钥
- opencv 图片增加水印
- 停止Java线程,小心interrupt()方法
- Java:String和Date、Timestamp之间的转换
- BZOJ2986 Non-Squarefree Numbers
- C#单例启动程序
- -ROOT-表和.META.表详解
- C#Winform进度条的使用
- java获取当前月的天数、java获取当前月每天的日期
- C++ 基础知识回顾
- leetcode 103. Binary Tree Zigzag Level Order Traversal
- 解决tomcat8080端口被占用问题
- 先简单介绍下现在的情况吧,希望我的经历能作为别人的参考,虽然也没有什么人看