bzoj4916 神犇和蒟蒻
来源:互联网 发布:网络平台合作协议 编辑:程序博客网 时间:2024/06/04 17:49
求
构造和式
一方面
另一方面,
而我们又知道
因此不难杜教筛了。
#include<cstdio>#include<algorithm>using namespace std;#define LL long longconst int p=1000000007,mod=1000007,maxn=1000000,inv=166666668;int vis[maxn],prm[maxn],phi[maxn],sum[maxn];struct hash{ int fir[maxn+10],ne[maxn+10],val[maxn+10],ans[maxn+10],tot; int find(int n) { for (int i=fir[n%mod];i;i=ne[i]) if (val[i]==n) return ans[i]; return -1; } void ins(int n,int x) { int y=n%mod; tot++; ne[tot]=fir[y]; fir[y]=tot; val[tot]=n; ans[tot]=x; }}h;int inc(int x,int y){ x+=y; return x>p?x-p:x;}int dec(int x,int y){ x-=y; return x<0?x+p:x;}int solve(int n){ if (n<=maxn) return sum[n]; int ret=h.find(n); if (ret!=-1) return ret; ret=(LL)n*(n+1)%p*(2*n+1)%p*inv%p; for (int i=2,j;i<=n;i=j+1) { j=n/(n/i); ret=dec(ret,(LL)(i+j)*(j-i+1)/2*solve(n/i)%p); } h.ins(n,ret); return ret;}int main(){ int tot=0,n; sum[1]=1; for (int i=2;i<=maxn;i++) { if (!vis[i]) { prm[++tot]=i; phi[i]=i-1; } for (int j=1;j<=tot&&(LL)i*prm[j]<=maxn;j++) { vis[i*prm[j]]=1; if (i%prm[j]) phi[i*prm[j]]=phi[i]*(prm[j]-1); else { phi[i*prm[j]]=phi[i]*prm[j]; break; } } sum[i]=inc(sum[i-1],(LL)i*phi[i]%p); } scanf("%d",&n); printf("1\n%d\n",solve(n));}
阅读全文
0 0
- bzoj4916 神犇和蒟蒻
- [bzoj4916]神犇和蒟蒻
- bzoj4916神犇和蒟蒻 杜教筛
- [bzoj4916] 神犇和蒟蒻
- bzoj4916
- bzoj 4916 神犇和蒟蒻
- BZOJ 4916 神犇和蒟蒻
- bzoj 4916: 神犇和蒟蒻
- BZOJ 4916: 神犇和蒟蒻 杜教筛 数学
- [杜教筛] BZOJ 4916 神犇和蒟蒻
- bzoj 4916: 神犇和蒟蒻 杜教筛
- BZOJ 4916 神犇和蒟蒻(杜教筛)
- 蒟蒻复习之—–前缀和和差分
- 【诗和远方】一个蒟蒻的年初展望
- 神和人
- 盾神和珠子
- . 和 ->
- || 和&&
- 欢迎使用CSDN-markdown编辑器
- 省队集训DAY4
- CAS单点登录报错 org.jasig.cas.client.util.XmlUtils 必须由匹配的结束标记
- 好看的人太多,有趣的人太少
- windows中使用make
- bzoj4916 神犇和蒟蒻
- Redis持久化:aof和rdb
- 中国剩余定理题——Biorhythms
- Android 之 控件的背景样式总结
- 正则案例
- STM32学习之普通定时器是否能定时1us?
- BZOJ 3944 Sum
- qt学习笔记:Qt标准对话框之QInputDialog
- spring中JdbcTemplate