【51NOD 1239】欧拉函数之和
来源:互联网 发布:禁止安装任何软件方法 编辑:程序博客网 时间:2024/05/21 19:26
Description
求
Solution
一道杜教筛裸题
有结论:(证明在这里)
则:
直接上杜教筛加上哈希即可,
复杂度:
Code
#include <cstdio>#include <cstdlib>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;typedef long long LL;const int N=5000500,M=1544657,mo=1e9+7;const LL eni=500000004;int n;bool prz[N];int pr[N];int phi[N];int Hx[M+1][2];int co;int HX(LL q){ int i=q%M; while(Hx[i][0]&&Hx[i][0]!=q)i=(i+1)%M; return i;}LL Gphi(LL q){ if(q<=n)return phi[q]; int t=HX(q); if(Hx[t][0])return Hx[t][1]; Hx[t][0]=q; LL ans=0,i=2; while(i<=q) { LL ni=q/(q/i); ans=(ans+(ni-i+1)*Gphi(q/i))%mo; i=ni+1; } q%=mo; return Hx[t][1]=(q*(q+1)%mo*eni%mo-ans)%mo;}int main(){ n=N-10; phi[1]=1; fo(i,2,n) { if(!prz[i])pr[++pr[0]]=i,phi[i]=i-1; fo(j,1,pr[0]) { LL t=pr[j]*i; if(t>n)break; prz[t]=1; phi[t]=phi[i]*pr[j]; if(i%pr[j]==0)break; phi[t]=phi[i]*(pr[j]-1); } } fo(i,2,n)phi[i]=(phi[i]+phi[i-1])%mo; LL q; scanf("%lld",&q); printf("%lld\n",(Gphi(q)+mo)%mo); return 0;}
0 0
- 【51Nod 1239】欧拉函数之和
- 51nod 1239欧拉函数之和
- 【51NOD 1239】欧拉函数之和
- 51nod 1239 欧拉函数之和
- [51NOD]1239 欧拉函数之和
- 51nod 1239 欧拉函数之和
- 51Nod-1239-欧拉函数之和
- 51Nod 1239 欧拉函数之和
- 51nod 1239 欧拉函数之和
- 51nod 1239 欧拉函数之和
- 51nod 1239 欧拉函数之和
- [杜教筛模板] 51Nod 1239 欧拉函数之和
- 51 NOD 1239 欧拉函数之和(杜教筛)
- [杜教筛] 51Nod 1239: 欧拉函数之和
- 51nod-1040-最大公约数之和(欧拉函数)
- 51NOD 1040 最大公约数之和(分析 + 欧拉函数)
- 51nod-1040-1040 最大公约数之和(欧拉函数)
- 51NOD 1040 1040 最大公约数之和 数论 欧拉函数
- 学生信息管理系统
- HDU3486 二分+RMQ
- 编译运行内核里面的helloworld以及使用递归计算阶乘
- OpenGL函数封装:在任意两个三维点之间绘制给定半径的圆柱体管道
- 增强现实
- 【51NOD 1239】欧拉函数之和
- Java排序算法之快速排序
- webpack loader一览
- cocos2dx-2.2.3下载地址
- 自动化测试入门
- lightoj1018
- 第二次上机实验报告
- 聚类算法(一)
- 天梯赛抢红包与PAT judge