BZOJ3561: DZY Loves Math VI
2016-03-03 13:37
239 查看
昨天推了个式子发现根本不能玩。。。
后来看了别人的blog发现就是那个式子
是可以做到n^(3/2)的。。。
太傻了
后来看了别人的blog发现就是那个式子
是可以做到n^(3/2)的。。。
太傻了
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> using namespace std; #define ll long long const ll mod=1000000007; const ll maxn=500001; ll mu[maxn],mul[maxn],pre[maxn]; ll prime[maxn],tot; bool check[maxn]; char c; inline void read(ll &a) { a=0;do c=getchar();while(c<'0'||c>'9'); while(c<='9'&&c>='0')a=(a<<3)+(a<<1)+c-'0',c=getchar(); } inline ll D(ll x) { ll y=x,base=1,res=1; while(x) { if(x&base)x^=base,res=res*y; base<<=1; y*=y; if(y>=mod)y%=mod; if(res>=mod)res%=mod; } return res; } int main() { ll d,t,i,j,k; mu[1]=1; for(i=2;i<maxn;i++) { if(!check[i])prime[++tot]=i,mu[i]=-1; for(j=1;j<=tot;j++) { k=i*prime[j]; if(k>=maxn)break; if(i%prime[j]==0){check[k]=true,mu[k]=0;break; } check[k]=true,mu[k]=-mu[i]; } } for(i=1;i<maxn;i++)mul[i]=1; ll n,m; read(n),read(m); if(m<n)swap(n,m); ll ans=0,base,ed,ed2,base2; for(d=1;d<=n;d++) { base=D(d),ed=n/d,ed2=m/d; for(i=1;i<=ed2;i++) { mul[i]*=i; if(mul[i]>=mod) mul[i]%=mod; pre[i]=mul[i]+pre[i-1]; if(pre[i]>=mod)pre[i]-=mod; } t=1; for(t=1;t<=ed;t++) if(mu[t]) ans=(ans+((base*mul[t]%mod)*mul[t]*mu[t]%mod)*(pre[n/(t*d)]*pre[m/(t*d)]%mod))%mod; } printf("%lld\n",ans); return 0; }
相关文章推荐
- lob表中出现坏块的处理方法
- java中字符串怎样截取成一个一个的小段
- HDU 4508 湫湫系列故事——减肥记I(全然背包)
- hdu 4628 Pieces 状压dp
- 初识jquery
- TableView制作聊天界面
- ArcGIS教程:环境级别和等级
- 回溯,字符串处理,全排列
- ARM Linux从Bootloader、kernel到filesystem启动流程
- c3p0的使用实例!
- LeetCode Power of Two
- kubernetes集群中部署kube-ui
- 蓝桥杯历届-卖鸡蛋
- Gson转json时忽略对某域的序列化
- [疯狂Java笔记]AWT:常用组件
- word2013从某页设置页码
- 利用Opencv保存图片,并生成JPG格式,调整压缩质量。
- POJ 3635 Full Tank? 最短路DP
- linux面试之你认识的fork、vfork、clone
- GIS in logistics(2)