HDU 6134 莫比乌斯反演
来源:互联网 发布:linux mount cifs 编辑:程序博客网 时间:2024/05/22 08:06
题目链接
题意:
已知
思路:
首先套上莫比乌斯反演的经典转化:
得:
转换枚举变量为
则
令
则:
又令
则:
故如果我们能预处理出
但直接分块维护
然后打表找规律易发现,
即:
其中
这样就可以
至此,大功告成。
总复杂度:
代码:
#include<cstdio>#include<cstring>#include<vector>using namespace std;typedef long long int ll;const ll mod = 1e9 + 7;const int A = 1e6 + 10;int mu[A],pri[A],tot;ll d[A],cnt[A],sum[A];bool vis[A];void init(){ tot = 0;mu[1] = d[1] = 1; for(int i=2 ;i<A ;i++){ if(!vis[i]){mu[i] = -1;pri[++tot] = i;d[i] = 2;cnt[i] = 1;} for(int j=1 ;j<=tot && pri[j]*i<A ;j++){ vis[i*pri[j]] = 1; if(i%pri[j] == 0){ d[i*pri[j]] = d[i]/(cnt[i]+1)*(cnt[i]+2); cnt[i*pri[j]] = cnt[i] + 1; mu[i*pri[j]] = 0; break; } d[i*pri[j]] = d[i]<<1; cnt[i*pri[j]] = 1; mu[i*pri[j]] = -mu[i]; } } sum[1] = 1; for(int i=2 ;i<A ;i++){ sum[i] = (sum[i-1] + d[i-1] + 1)%mod; } for(int i=1 ;i<A ;i++){ sum[i] = (sum[i] + sum[i-1])%mod; mu[i] = (mu[i] + mu[i-1])%mod; }}int main(){ init(); int n; while(~scanf("%d",&n)){ ll ans = 0; int last; for(int i=1 ;i<=n ;i=last + 1){ last = n/(n/i); ans = (ans + (mu[last]-mu[i-1])%mod*(sum[n/i])%mod)%mod; } ans = (ans%mod + mod)%mod; printf("%I64d\n",ans); } return 0;}
阅读全文
1 0
- HDU 6134 莫比乌斯反演
- HDU 6134 莫比乌斯反演
- hdu 6134(莫比乌斯反演)
- hdu 1695 莫比乌斯反演
- hdu 5072 莫比乌斯反演
- hdu 1695 莫比乌斯反演
- hdu 1695 莫比乌斯反演
- HDU 5656 (莫比乌斯反演)
- HDU 4675 (莫比乌斯反演)
- hdu 5212(莫比乌斯反演)
- hdu 1695 莫比乌斯反演
- HDU 1695 莫比乌斯反演
- HDU 6053 莫比乌斯反演
- hdu 6053-莫比乌斯反演
- HDU 6053 莫比乌斯反演
- hdu 1695 莫比乌斯反演
- hdu 6134 Battlestation Operational 莫比乌斯反演
- HDU 6134 数学公式 + 莫比乌斯反演
- 丑数
- python any()和all()用法
- Linux中` `、$、$( ) 、${ } 有什么区别
- 1 ,js入门基础
- sqlserver数据库大型应用解决方案总结 数据库负载均衡
- HDU 6134 莫比乌斯反演
- ORM简介
- 【HDU 4734】 F(x)
- poj 1659 Frogs' Neighborhood havel定理
- KMP
- HDU 6134 && 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)
- java中类的方法初始化顺序
- freeswitch系列二 kamailio 5.0安装及实现kamailio集成freeswitch
- fastjson浮点类型显示科学计数法的问题