51nod1220约数之和
来源:互联网 发布:网络推广有几种方法 编辑:程序博客网 时间:2024/05/17 08:48
51nod1220约数之和
Time Limit 3s Memory Limit 128KB
Description
求
Input
一个数n(0
Output
一个数答,对
Sample Input
1000
Sample Output
576513341
解题思路
莫比乌斯反演,杜教筛的各种技能
定义
d|ij要满足
∃xy=d[x|i][y|j] ,x取gcd(i,d) 能供给完[x|i] 也就是说,这时gcd(y,i)=1 当且仅当y|j 时d|ij 成立,即d|ij↔dgcd(i,d)|j
考虑化为
用i代替
设
其实h和g是等价的
∑i=1x12⌊xi⌋(⌊xi⌋+1)=∑i=1x∑j=1⌊xi⌋j(i的出现次数和j的出现次数是一样的)=∑i=1x∑j=1⌊xi⌋i=∑i=1x⌊xi⌋i
我们想,
当
i<=n√ 时,i∈[1,n√]
当i>n√ 时,ni<n√
∴⌊ni⌋ 只有2n√ 种
对于i ,有j=max{x|⌊nx⌋=⌊ni⌋}=⌊n⌊ni⌋⌋
所以,分块处理
只需维护
有
对于S(x)
那么
同样,分块处理
预处理前
总复杂度
#include<cstring>#include<cstdio>#include<cctype>#define N 3001001#define lim 43007#define mo 1000000007#define ny 500000004using namespace std;typedef long long ll;ll n,s[N],sum[lim],hash[lim],mu[N],pr[N];bool bz[N];int get(ll x){ int y=(int)(x%lim); while(hash[y] && hash[y]!=x)y++,y=y==lim?0:y;return y;}ll S(ll a){ if(a<N)return s[a]; int x=get(a); if(hash[x])return sum[x]; hash[x]=a;ll ans=1; for(ll i=2,j;i<=a;i=j+1){ j=a/(a/i); ans=(ans-(j+i)%mo*((j-i+1)%mo)%mo*ny%mo*S(a/i)%mo+mo)%mo; }sum[x]=ans;return ans;}ll g(ll a){ ll ans=0; for(ll i=1,j;i<=a;i=j+1){ j=a/(a/i); ans=(ans+a/i%mo*((i+j)%mo*((j-i+1)%mo)%mo*ny%mo))%mo; }return ans;}int main(){ s[1]=mu[1]=1; for(ll i=2;i<N;i++){ if(!bz[i])mu[pr[++pr[0]]=i]=-1; s[i]=(s[i-1]+mu[i]*i%mo+mo)%mo; for(int j=1;j<=pr[0] && i*pr[j]<N;j++){ bz[i*pr[j]]=1;mu[i*pr[j]]=-mu[i]; if(i%pr[j]==0){mu[i*pr[j]]=0;break;} } } scanf("%lld",&n); ll ans=0; for(ll i=1,j,las=0,now,t;i<=n;i=j+1,las=now){ j=n/(n/i);now=S(j);t=g(n/i); ans=(ans+(now-las+mo)%mo*t%mo*t%mo)%mo; } printf("%lld",ans);}
阅读全文
1 0
- 51nod1220 约数之和
- 51nod1220约数之和
- 【51nod1220】约数之和
- [杜教筛] 51nod1220. 约数之和
- 51Nod-1220-约数之和
- 51nod 1220 约数之和
- 51nod 1220 约数之和
- 约数之和
- 约数之和
- 约数之和
- [杜教筛 约数和前缀和] 51Nod 1220 约数之和
- (51nod1220) 2016.12.30 T3
- d020: 约数之和
- Divisor Summation约数之和
- A^B约数之和
- sdnu1037约数之和
- 南邮 OJ 1040 约数之和
- 南邮 OJ 1740 约数之和
- IIC介绍(一)之物理层介绍
- android发布maven报错:Could not write to file '*****/build/poms/pom-default.xml'
- 浅谈 Mybatis中的 ${ } 和 #{ }的区别
- jquery的ajax实现异步请求范例
- Java学习第八天
- 51nod1220约数之和
- 数据库连接池
- 【第四周项目3】单链表应用(二)
- UnityInAppPurchase(Apple&Google)
- 指针数组和数组指针的详细解答
- 数组
- [最大流]BZOJ 1711: [Usaco2007 Open]Dining吃饭 题解
- HBase 通过 Maven 用 Java API 进行增删查put/get/delete
- 两个数的对比