hdu6134 Battlestation Operational 莫比乌斯反演
来源:互联网 发布:安卓系统编程入门pdf 编辑:程序博客网 时间:2024/06/14 21:27
题目:
where
思路:
令F[i]=i/1+i/2+...+i/i 向上取整
D[i]=i/1+i/2+...+i/i 向下取整
其中F[i]=D[i-1]+1,D[i]=F[i]-i+cnt,cnt为i的因子的个数
然后就可以使用容斥定理了。
代码:
#pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<list>#include<numeric>using namespace std;#define LL long long#define ULL unsigned long long#define INF 0x3f3f3f3f#define mm(a,b) memset(a,b,sizeof(a))#define PP puts("*********************");template<class T> T f_abs(T a){ return a > 0 ? a : -a; }template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}// 0x3f3f3f3f3f3f3f3f// 0x3f3f3f3fconst int MOD=1e9+7;const int maxn=1e6+50;bool check[maxn];int prime[maxn];int mu[maxn],sum[maxn];int F[maxn],D[maxn],ans[maxn];void Moblus(int n){ mm(check,false); mu[1]=1; int tot=0; for(int i=2;i<=n;i++){ if(!check[i]){ prime[tot++]=i; mu[i]=-1; } for(int j=0;j<tot;j++){ if(i*prime[j]>n) break; check[i*prime[j]]=true; if(i%prime[j]==0){ mu[i*prime[j]]=0; break; } else{ mu[i*prime[j]]=-mu[i]; } } } F[1]=D[1]=1; for(int i=2;i<=n;i++){ F[i]=D[i-1]+i; int x=i,cnt=1; for(int j=0;prime[j]*prime[j]<=i;j++){ int num=0; while(x%prime[j]==0){ num++; x/=prime[j]; } cnt*=(num+1); } if(x>1) cnt*=2; D[i]=F[i]-i+cnt; } for(int i=1;i<=n;i++) ans[i]=F[i]; for(int i=2;i<=n;i++){ for(int j=i;j<=n;j+=i) ans[j]+=mu[i]*F[j/i]; } for(int i=2;i<=n;i++){ ans[i]=(ans[i]+ans[i-1])%MOD; }}int main(){ int n; Moblus(maxn-5); while(~scanf("%d",&n)){ printf("%d\n",ans[n]); } return 0;}
阅读全文
0 0
- 【HDU6134】Battlestation Operational (莫比乌斯反演)
- 【HDU6134】Battlestation Operational(莫比乌斯反演)
- hdu6134 Battlestation Operational 莫比乌斯反演
- Battlestation Operational(hdu6134 莫比乌斯反演)
- HDU6134 Battlestation Operational 【莫比乌斯】
- hdu 6134 Battlestation Operational 莫比乌斯反演
- 解题报告:HDU_6134:Battlestation Operational (莫比乌斯反演)
- HDU 6134 Battlestation Operational(积性函数+莫比乌斯反演)
- hdu 6134 Battlestation Operational (莫比乌斯反演+线性筛法+差分)
- HDU 6134 Battlestation Operational(莫比乌斯反演+线性筛)
- HDU 6134 Battlestation Operational 莫比乌斯反演 + 数学推导
- HDU 6134(2017 多校训练:Battlestation Operational(莫比乌斯反演))
- HDU 6134 Battlestation Operational 2017多校8 莫比乌斯反演
- hdu6134-(莫比乌斯反演)
- HDU6134(莫比乌斯反演)
- hdu6134-莫比乌斯反演+思维
- HDU 6134 && 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)
- HDU 6134 Battlestation Operational(基本数论+莫比乌斯反演)——2017 Multi-University Training Contest
- 设计模式之工厂模式
- C
- ZOJ-2091-Mean of Subsequence (反证法的运用!!)
- Redis系列学习(三)之java api接入及事务 (补)
- C++的标准库与命名空间
- hdu6134 Battlestation Operational 莫比乌斯反演
- A
- Python3之round用法
- android 动画 -- tween动画(续)
- 洛谷 P3375 KMP字符串匹配
- 遍历list,remove出现问题
- Java并发编程实战(四)活跃性
- 百练 2811: 熄灯问题
- WIN10+GNS3环境,安装loopback虚拟网卡连接cloud