[51nod1239]欧拉函数之和
来源:互联网 发布:数据库系统由什么组成 编辑:程序博客网 时间:2024/05/24 07:11
Description
求
n<=10^10
Solution
这道题和莫比乌斯函数一行,都可以通过神奇的推导的出结论。
我们设
众所周知,
那么,
于是
于是和那道题一样做就好了。
还有一种做法。
这个问题的本质就是1~n中两两互质的数的对数。
那么我们可以用反演搞出来一个式子
然后就分块搞就行了。
不过还是需要莫比乌斯函数前缀和。
参照51nod1244
Code
#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define rep(i,a) for(int i=last[a];i;i=next[i])#define N 5000000using namespace std;typedef long long ll;const int Mo=1000000007;const int mo=2333333;const int ni=500000004;int phi[N+5],p[N+5],l;int last[mo],next[mo];bool bz[N+5];ll n,t[mo],v[mo];void add(int x,ll y,ll z) { t[++l]=y;v[l]=z;next[l]=last[x];last[x]=l;}ll calc(ll x) { if (x<=N) return phi[x];int k=x%mo;ll ans=0,z=x%Mo; rep(i,k) if (t[i]==x) return v[i]; for(ll l=2,r;l<=x;l=r+1) r=x/(x/l),(ans+=(r-l+1)%Mo*calc(x/l)%Mo)%=Mo; ans=(z*(z+1)%Mo*ni%Mo-ans+Mo)%Mo; add(k,x,ans); return ans;}int main() { fo(i,2,N) { if (!bz[i]) p[++p[0]]=i,phi[i]=i-1; fo(j,1,p[0]) { int k=i*p[j];if (k>N) break; bz[k]=1;if (!(i%p[j])) {phi[k]=phi[i]*p[j];break;} phi[k]=phi[i]*(p[j]-1); } } phi[1]=1;fo(i,1,N) (phi[i]+=phi[i-1])%=Mo; scanf("%lld",&n);printf("%lld",calc(n));}
0 0
- [51nod1239]欧拉函数之和
- [51NOD1239]欧拉函数之和
- 【51nod1239】 欧拉函数之和
- 【51Nod1239】欧拉函数之和-杜教筛+哈希表
- 【杜教筛】51Nod1239[欧拉函数之和]题解
- 51nod1239欧拉函数求和
- 51nod1040 最大公约数之和 (欧拉函数 )
- 【51Nod 1239】欧拉函数之和
- 【51nod1040】【最大公约数之和】【欧拉函数】
- 51nod 1239欧拉函数之和
- 【51NOD 1239】欧拉函数之和
- 51Nod1040 最大公约数之和 欧拉函数
- 51nod 1239 欧拉函数之和
- [51NOD]1239 欧拉函数之和
- 51nod 1239 欧拉函数之和
- 51Nod-1239-欧拉函数之和
- 51Nod 1239 欧拉函数之和
- 51nod 1239 欧拉函数之和
- springmvc mybatis集成
- 《设计模式》之Creational模式:简介
- SVN里恢复到某一天的版本操作
- 6.Half Lambert光照Diffuse Shader
- gradle project sync failed.Basic functionality(e.g.editing,debugging) will not work
- [51nod1239]欧拉函数之和
- HIVE的ACID特性
- Android WiFi STA Framework层分析(基于KitKat4.4.4)
- [Python] 使用python的随机验证码。
- 从git中导出项目
- UVA 10934 Dropping water balloons
- EditText实现搜索框常见需求详解(配合软键盘的应用和模拟搜索List结果集)
- 解决 ionic 中的 CORS(跨域) 问题【译】
- 现代OGL Shader中VAO,VBO和GL_ELEMENT_ARRAY_BUFFER之间的关系